正则表达式只捕获重复组的最后一次出现

2024-04-24 14:47:54 发布

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

我试图从如下字符串中捕获多个“<;attribute>;=<;value>;”与Python regular expression对:

  some(code) ' <tag attrib1="some_value" attrib2="value2"                   en=""/>

正则表达式'\s*<tag(?:\s*(\w+)\s*=\"(.*?)\")*旨在多次匹配这些对,即返回类似

^{pr2}$

但它只捕获最后一次发生的事件:

>>> import re
>>> re.search("'\s*<tag(?:\s*(\w+)\s*=\"(.*?)\")*", '  some(code) \' <tag attrib1="some_value" attrib2="value2"                   en=""/>').groups()
('en', '')

关注<;attrib>;=“<;value>;”作品:

>>> re.findall("(?:\s*(\w+)\s*=\"(.*?)\")", '  some(code) \' <tag attrib1="some_value" attrib2="value2"                   en=""/>')
[('attrib1', 'some_value'), ('attrib2', 'value2'), ('en', '')]

所以一个实用的解决方案可能是在运行这个正则表达式之前测试"<tag" in string,但是。。在

为什么原始正则表达式只捕获最后一次出现的内容,以及需要进行哪些更改才能使其正常工作?在


Tags: 字符串ltgtrevaluetagcodeattribute
2条回答

documentation搜索将只返回一个匹配项。findAll方法返回列表中出现的所有内容。这就是您需要使用的,就像在第二个示例中一样。在

这就是regex的工作原理:您定义了一个捕获组,所以只有一个捕获组。当它第一次捕获某个对象,然后捕获另一个对象时,第一个捕获的项是换了。那个这就是为什么你只得到最后一个捕获的。
我知道没有解决的办法。。。在

相关问题 更多 >