python - 你能用一个正则表达式来解析函数参数吗?

标签 python regex parsing

问题

有一个程序文件,在文件中的某个位置包含以下代码片段。

...

food($apples$ , $oranges$ , $pears$ , $tomato$){
  ...
}

...

此函数可以包含任意数量的参数,但它们必须是以逗号分隔的字符串。所有参数字符串都是小写单词。

我希望能够使用正则表达式解析出每个参数。例如,python 中的结果列表如下:

["apples", "oranges", "pears", "tomato"]

尝试的解决方案

使用 python RE 模块,我能够通过将问题分成两部分来实现这一点。

  1. 在代码中找到函数并提取参数列表。

    plist = re.search(r'food\((.*)\)', programString).group(1)
    
  2. 使用另一个正则表达式拆分列表。

    params = re.findall(r'[a-z]+', plist)
    

问题

无论如何我可以用一个正则表达式而不是两个来实现这一点吗?

编辑

感谢 Tim Pietzcker 的回答,我找到了一些相关的问题:

  1. Python regular expressions - how to capture multiple groups from a wildcard expression?
  2. Which regex flavors support captures (as opposed to capturing groups)?

最佳答案

要回答您的问题“能否在单个正则表达式中完成?”:是的,但不能在 Python 中完成。

如果您想像示例中那样(单独)匹配和捕获未知数量的匹配项,仅使用一个正则表达式,那么您需要 a regex engine that supports captures (as opposed to capturing groups) .目前只有 .NET 和 Perl 6 可以做到这一点。

因此在 Python 中,您要么需要分两步完成(find 整个 food(...) 函数调用,然后是 findall 按照 Dingo 的建议使用第二个正则表达式进行个人匹配。

或者使用像 Paul McGuire 的 pyparsing 这样的解析器。

关于python - 你能用一个正则表达式来解析函数参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885653/

相关文章:

python - RegEx - 如何仅获取在大输出中重复的多行文本 block ?

regex - 在 Bash 中将 vim 替换为 sed/awk

xml - 完全用 Perl 编写的 XML 解析器的优点和缺点是什么

postgresql - 禁用 PostgreSQL 8.4 tsvector 解析器的 `file` token 类型

javascript - 如何从 html blob 中的脚本标记中提取变量

python - 在 Django 中隐藏日期时间模型字段中的时间?

python - 从 Python 脚本中取消设置或删除最近的 .bash_history

Python数据框用n个元素的列表替换最后n行

regex - 带有匹配单词开头的字符串的 NSPredicate

Javascript正则表达式替换插入额外的斜杠