我想捕獲多的最後一次出現「<屬性> = <價值>」從這樣的字符串,其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解析器。 –