问题
有一个程序文件,在文件中的某个位置包含以下代码片段。
...
food($apples$ , $oranges$ , $pears$ , $tomato$){
...
}
...
此函数可以包含任意数量的参数,但它们必须是以逗号分隔的字符串。所有参数字符串都是小写单词。
我希望能够使用正则表达式解析出每个参数。例如,python 中的结果列表如下:
["apples", "oranges", "pears", "tomato"]
尝试的解决方案
使用 python RE 模块,我能够通过将问题分成两部分来实现这一点。
在代码中找到函数并提取参数列表。
plist = re.search(r'food\((.*)\)', programString).group(1)
使用另一个正则表达式拆分列表。
params = re.findall(r'[a-z]+', plist)
问题
无论如何我可以用一个正则表达式而不是两个来实现这一点吗?
编辑
感谢 Tim Pietzcker 的回答,我找到了一些相关的问题:
最佳答案
要回答您的问题“能否在单个正则表达式中完成?”:是的,但不能在 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/