我试图从如下字符串中捕获多个“<;attribute>;=<;value>;”与Python regular expression对:
some(code) ' <tag attrib1="some_value" attrib2="value2" en=""/>
正则表达式'\s*<tag(?:\s*(\w+)\s*=\"(.*?)\")*
旨在多次匹配这些对,即返回类似
但它只捕获最后一次发生的事件:
>>> 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
,但是。。在
为什么原始正则表达式只捕获最后一次出现的内容,以及需要进行哪些更改才能使其正常工作?在
从documentation搜索将只返回一个匹配项。findAll方法返回列表中出现的所有内容。这就是您需要使用的,就像在第二个示例中一样。在
这就是regex的工作原理:您定义了一个捕获组,所以只有一个捕获组。当它第一次捕获某个对象,然后捕获另一个对象时,第一个捕获的项是换了。那个这就是为什么你只得到最后一个捕获的。
我知道没有解决的办法。。。在
相关问题 更多 >
编程相关推荐