Python正则表达式 - 重复匹配时分割?

2024-05-14 17:15:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串:

{topic.equals(org.fedoraproject.prod.bodhi.buildroot_override.tag), foo.notequals(bar)}
{topic.in(1,2,3), foo.equals(baz)}

我想得到结果:

^{pr2}$

卷发的范围是无限的,但基本的匹配需要:

^{3}$

所以卷发里可能有15场比赛。在


Tags: 字符串inorgtopicfootagbarprod
2条回答

我认为这很管用,但我想听听大家的意见,因为它不是很优雅:

column_regex = re.compile("\w+\.\w+\(.+?\)")
results = re.findall(column_regex, data)

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

^{pr2}$

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

filter_regex = re.compile("^(?P<column>\w+)\.(?P<command>\w+)\((?P<args>.+?)\)")

要进行匹配并获得值:

filter_match = re.match(filter_regex, match)
filter_match.group('command')

我会尽量简单:

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

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

这依赖于这样一个事实:命令由逗号加上空格分隔,而示例中的参数只使用逗号而不使用空格。如果您有任何违反这一区别的东西,那么您确实需要求助于正则表达式。我只想把它限制在分割上:

^{pr2}$

如果commandsep表达式前面有一个)右括号(使用look-behind断言),则commandsep表达式将在任何逗号加上可选空格上拆分。在

输入结果:

>>> entries
[['topic.equals(org.fedoraproject.prod.bodhi.buildroot_override.tag)', 'foo.notequals(bar)'], ['topic.in(1,2,3)', 'foo.equals(baz)']]

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

import re

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

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

相关问题 更多 >

    热门问题