2015-04-02 173 views
-3

我是使用Python Regex的新手。我試圖從HTML中提取一些數據,並且不確定正確的語法是否正確地執行此操作用Python解析HTML正則表達式

我得到以下數據,我想提取數據Birthdate ='1969年7月4日',家鄉=「馬隊領,新澤西州」,學院=「賓夕法尼亞州立大學,1991年」,研究生=「弗吉尼亞州,1996年」

data = <b>Birthdate:</b> July 4, 1969<br/><b>Hometown:</b> Colts Neck, N.J.<br/><b>College:</b> Penn State, 1991<br/><b>Post-graduate:</b> Virginia, 1996</td></tr></table> 
Birthdate = re.findall(r'<b>Birthdate:</b>(.*)<br/>', data) 
Hometown = re.findall(r'<b>Hometown:></b>(.*)<br/>', data) 
College = re.findall(r'<b>College:</b>(.*)<br/>, data) 
Post-graduate = re.findall(r,<b>Post-graduate:</b>(.*)<td/>, data) 

誠然,我沒有使用re.findall或通配符(.*)正常這裏是因爲我得到一個返回的字符串,該字符串以我想要的值開始,併到達數據末尾,最後一個
標記。我想使用一個函數來在這個例子中定義 (.*)的模式之間拉取數據。

+6

來吧,有很多HTML解析器的在那裏。不要爲此使用正則表達式。 – n0rd 2015-04-02 01:26:09

+3

選擇一個html解析器。正則表達式註定了瀏覽器不得不工作的非標準HTML。如果您選擇的解析器不起作用,請參閱「整理」,作爲過濾器。 – 2015-04-02 01:30:35

回答

1

如果你想使用regex,那麼你可以考慮這個,

>>> import re 
>>> s = '''data = <b>Birthdate:</b> July 4, 1969<br/><b>Hometown:</b> Colts Neck, N.J.<br/><b>College:</b> Penn State, 1991<br/><b>Post-graduate:</b> Virginia, 1996</td></tr></table>''' 
>>> dict(re.findall(r'<b>([^:]*):</b> *([^<]*)', s)) 
{'Hometown': 'Colts Neck, N.J.', 'Birthdate': 'July 4, 1969', 'College': 'Penn State, 1991', 'Post-graduate': 'Virginia, 1996'} 
+0

謝謝你的幫助。這refindall和轉換爲字典完美的工作,我需要做的。有什麼更好的庫可以用於未來的這種類型的解析? – 2015-04-02 01:48:36

+0

將來使用BeautifulSoup解析器。 – 2015-04-02 01:58:38