2012-09-12 59 views
7

我的正則表達式不會對我的字符串做任何事情。python正則表達式匹配任何東西

蟒蛇

data = 'random\n<article stuff\n</article>random stuff' 
datareg = re.sub(r'.*<article(.*)</article>.*', r'<article\1</article>', data, flags=re.MULTILINE) 
print datareg 

我得到

random 
<article stuff 
</article>random stuff 

我想

<article stuff 
</article> 
+2

唉,來吧:不[Cthulhu解析](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)再次。 – pillmuncher

+0

@pillmuncher:它看起來像格式不正確的HTML,所以我懷疑HTML解析器能夠很輕鬆地使用它。 – Blender

+0

@Blender:我認爲你是對的。但是替代似乎也不是有效的XML。我想知道,需要破解XML的是什麼? – pillmuncher

回答

10

re.MULTILINE並不能使你的正則表達式多在你希望它是的方式。

指定時,將圖案字符'^'匹配字符串的開頭,並在每個行的開始(緊接每個新行以下);並且模式字符'$'匹配字符串的末尾和每行末尾(緊接在每個換行符之前)。缺省情況下,'^'僅在字符串的開始處匹配,而'$'僅在字符串的末尾匹配,緊接在字符串末尾的換行符(如果有)之前。

re.DOTALL做:

充分利用'.'特殊的任何字符都匹配,包括換行; 沒有此標誌,'.'將匹配任何東西,但換行。

變化flags=re.MULTILINEflags=re.DOTALL和您正則表達式將工作。

+0

真棒,將標記爲正確:)謝謝! – user1442957

+0

救了我的一天!謝謝 – silviomoreto

相關問題