2015-04-02 225 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