首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Regex -在重复匹配时拆分?

Python Regex -在重复匹配时拆分?
EN

Stack Overflow用户
提问于 2013-01-26 23:50:57
回答 2查看 217关注 0票数 0

我有以下字符串:

代码语言:javascript
复制
{topic.equals(org.fedoraproject.prod.bodhi.buildroot_override.tag), foo.notequals(bar)}
{topic.in(1,2,3), foo.equals(baz)}

我想要得到结果:

代码语言:javascript
复制
["topic.equals(org.fedoraproject.prod.bodhi.buildroot_override.tag)", "foo.notequals(bar)"]
["topic.in(1,2,3)", "foo.equals(baz)"]

卷曲中的内容是无限的,但基本的匹配需要是:

代码语言:javascript
复制
<key>.<command>(<args>)

所以卷曲里可能有15根火柴。

EN

回答 2

Stack Overflow用户

发布于 2013-01-26 23:53:34

我会尽量保持简单:

代码语言:javascript
复制
entries = []
for line in inputsource:
    entries.append(map(str.strip, line.strip().strip('{}').split(', ')))

因此,对于每一行,去掉空格,再去掉大括号,然后在逗号加空格上拆分命令,并存储去掉空格的结果。

这取决于这样一个事实:命令由逗号加空格分隔,而示例中的参数仅使用不带空格的逗号。如果您有任何违反这种差异的东西,那么您确实需要求助于正则表达式。不过,我会把它限制在拆分上:

代码语言:javascript
复制
import re
commandsep = re.compile(r'(?<=\)),\s*')

for line in inputsource:
    entries.append(map(str.strip, commandsep.split(line.strip().strip('{}'))))

只要前面有一个)结束括号(使用回看断言),commandsep表达式就可以在任何逗号加可选空格上拆分。

对于您的输入,其结果为:

代码语言:javascript
复制
>>> entries
[['topic.equals(org.fedoraproject.prod.bodhi.buildroot_override.tag)', 'foo.notequals(bar)'], ['topic.in(1,2,3)', 'foo.equals(baz)']]

如果这些条目嵌入到较大的文本中,则正则表达式可能会有所帮助,但只能找到花括号分隔的值:

代码语言:javascript
复制
import re

expression = re.compile(r'{[^{}]+}')
inputsource = expression.findall(largerbodyoftext)

其中expression将找到任何由大括号分隔的文本(没有嵌套)。

票数 0
EN

Stack Overflow用户

发布于 2013-01-27 00:50:26

我认为这是可行的,但我希望得到一些意见,因为它不是很优雅:

代码语言:javascript
复制
column_regex = re.compile("\w+\.\w+\(.+?\)")
results = re.findall(column_regex, data)

它将给出{}中的命令的结果:

代码语言:javascript
复制
['topic.equals(org.fedoraproject.prod.bodhi.buildroot_override.tag)', 'foo.notequals(bar)']

然后你可以对每个返回值使用第二个正则表达式:

代码语言:javascript
复制
filter_regex = re.compile("^(?P<column>\w+)\.(?P<command>\w+)\((?P<args>.+?)\)")

要进行匹配并获得值,请执行以下操作:

代码语言:javascript
复制
filter_match = re.match(filter_regex, match)
filter_match.group('command')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14538588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档