Problem
有一个程序文件,在文件中的某个位置包含以下代码片段。
...
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)
Question
无论如何,我可以用一个正则表达式而不是两个正则表达式来实现这一目标吗?
Edit
感谢 Tim Pietzcker 的回答,我找到了一些相关问题:
- Python 正则表达式 - 如何从通配符表达式中捕获多个组? https://stackoverflow.com/questions/464736/python-regular-expressions-how-to-capture-multiple-groups-from-a-wildcard-expre
- 哪些正则表达式风格支持捕获(而不是捕获组)? https://stackoverflow.com/questions/2652554/which-regex-flavors-support-captures-as-opposed-to-capturing-groups
回答你的问题“可以在单个正则表达式中完成吗?”:可以,但不能在Python中完成。
如果您想仅使用单个正则表达式来匹配和捕获(单独)未知数量的匹配项,如您的示例所示,那么您需要支持捕获(而不是捕获组)的正则表达式引擎 https://stackoverflow.com/questions/2652554/which-regex-flavors-support-captures-as-opposed-to-capturing-groups。目前只有 .NET 和 Perl 6 可以做到这一点。
所以在Python中,你要么需要分两步完成(find
整个food(...)
函数调用,然后findall
按照 Dingo 的建议,与第二个正则表达式进行单独匹配)。
或者使用像 Paul McGuire 这样的解析器pyparsing
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)