2014-10-12 117 views
0

我試圖提取使用正則表達式在Python中的HTML標籤之間的文本。問題在於有時在字符串中沒有HTML標記,所以我希望我的正則表達式匹配整個字符串。到目前爲止,我已經得到了標籤內文本相匹配的部分:匹配到第二個正則表達式,如果第一個沒有匹配

(?<=>).*(?=<\/) 

這符合俄羅斯在標籤下面

<a density="sparse" href="http://topics.bloomberg.com/russia/">Russia</a> 

或者,整個字符串將匹配:

Typhoon Vongfong prompted ANA to cancel 101 flights, affecting about 16,600 passengers, the airline said in a faxed statement. Japan Airlines halted 31 flights today and three tomorrow, it said by fax. The storm turned northeast after crossing Okinawa, Japan’s southernmost prefecture, with winds gusting to 75 knots (140 kilometers per hour), according to the U.S. Navy’s Joint Typhoon Warning Center. 

否則我希望它返回字符串中的所有文本。

我已經讀了一些關於正則表達式的在線,但我似乎無法讓他們工作。如果任何人都能指引我走向正確的方向,那會很棒。提前致謝。

+0

發佈一個示例以及預期輸出。 – 2014-10-12 06:18:45

+0

我已經添加了它們 – superlizardmo 2014-10-12 06:21:56

+0

使用了一些html解析器。 [例如Beautifulsoup](http://www.crummy.com/software/BeautifulSoup/) – nu11p01n73R 2014-10-12 06:24:13

回答

0

這是一個解決方法。而不是調整正則表達式,我們調整字符串:

>>> s='<a density="sparse" href="http://topics.bloomberg.com/russia/">Russia</a>' 
>>> re.findall(r'(?<=>)[^<>]*(?=<\/)', s if '>' in s else '>%s</' % s) 
['Russia'] 
>>> s='This is Russia Today' 
>>> re.findall(r'(?<=>)[^<>]*(?=<\/)', s if '>' in s else '>%s</' % s) 
['This is Russia Today'] 
1

你可以用一個正則表達式來做到這一點。您不需要採取任何解決方法。

>>> import re 
>>> s='<a density="sparse" href="http://topics.bloomberg.com/russia/">Russia</a>' 
>>> re.findall(r'(?<=>)[^<>]+(?=</)|^(?!.*?>.*?</).*', s, re.M) 
['Russia'] 
>>> s='This is Russia Today' 
>>> re.findall(r'(?<=>)[^<>]+(?=</)|^(?!.*?>.*?</).*', s, re.M) 
['This is Russia Today'] 
+0

+1,但我會使用'重新。 S'而不是're.M',因爲OP需要整個字符串。 – falsetru 2014-10-12 07:08:18

相關問題