我想捕获多的最后一次出现“<属性> = <价值>”从这样的字符串,其Python regular expression对:正则表达式只捕获重复组
some(code) ' <tag attrib1="some_value" attrib2="value2" en=""/>
正则表达式'\s*<tag(?:\s*(\w+)\s*=\"(.*?)\")*
是打算多次匹配这些对,即返回类似于
"attrib1", "some_value", "attrib2", "value2", "en", ""
但它只捕获最后一次发生:
>>> import re
>>> re.search("'\s*<tag(?:\s*(\w+)\s*=\"(.*?)\")*", ' some(code) \' <tag attrib1="some_value" attrib2="value2" en=""/>').groups()
('en', '')
关注<ATTRIB> = “<价值>” 作品:
>>> re.findall("(?:\s*(\w+)\s*=\"(.*?)\")", ' some(code) \' <tag attrib1="some_value" attrib2="value2" en=""/>')
[('attrib1', 'some_value'), ('attrib2', 'value2'), ('en', '')]
这样一个务实的解决方案可能是运行这个正则表达式之前测试"<tag" in string
,但..
为什么原始正则表达式是否仅捕获最后一次发生的事情,以及需要更改哪些内容才能使其正常工作?
每周“如何解析HTML/XML与正则表达式”的问题...使用XML解析器。不要试图对不规则的语言使用* regular *表达式。 – DeepSpace
你说得对,这个问题真的是关于正则表达式,而不是XML。 – handle
这就是正则表达式的工作原理。它只捕获最后一次发生。你不能用正则表达式捕获任意数量的事件。编写一个循环来多次应用正则表达式,或使用xml解析器。 –