使用
re.compile('">(CVE.*?)</a>')
# instead of your re.compile('\>"(CVE.*)"\<\/a>')
注意的是字符<> /不需要在正則表達式模式
進行轉義並注意.*
後?
字符停止以便量詞*
的貪婪行爲的匹配在第一個</a>
受到阻止時停止。關於這一點請參閱文檔,這是基本的
。
有時使用re
時,分析一個XML有問題| GML文本
有一次,我被告知,一個可能的問題是,標籤可以在幾行寫,例如:
ss = '''
<pre>
<a href="https://www.redhat.com/security/data/cve/CVE-2010-3718.html">CVE-20
10-371
8</a>
</pre>'''
在這種情況下,不會有任何匹配,因爲在正則表達式模式中用作符號的點不會象徵換行符'\ n'。因此該模式的.*?
部分將不允許按行運行。
要糾正此問題,請使用re.DOTALL
規範,該規範爲點符號提供了表示任何和所有字符的權力。
。
請注意,常見的信念是,不得使用工具來解析SGML或XML文本。但很少有人能夠徹底解釋爲什麼。我是其中一個不知道原因的人。
但個人而言,我認爲正則表達式可以用來分析文本。我寫'分析'而不是'PARSE'。
據我所知,解析是分析文本和基於標籤構建樹形表示的過程。
雖然我將文本分析定義爲...分析它,但沒有獲得樹表示的目的。
當樹形表示不需要從文本中提取數據時,請使用正則表達式,並且不要聽那些對這個主題有宗教考慮的人,比如在有趣但欺騙性(在我看來)的帖子中,其鏈接已被鑑於
儘管其他答案提出了更優雅的解決方案,這一個爲我捏了一把。謝謝。 – user1117603 2011-12-27 22:30:09