2012-02-04 103 views
0

如果必须从HTML页面源提取某些属性的值。例如:正则表达式提取数据

如果我想获取地址的值?

<span class="address">413 W. Street</span></span><br> 

编辑:抱歉,我理解错误的问题。 我试图删除这个问题,但没有能够。我在这里发布了新问题: https://stackoverflow.com/questions/9144544/regular-expressions-for-different-attributes

+0

你用什么基础语言解析HTML?我认为这是理所当然的,因为在代码获取之前,您无法重新格式化HTML。 – skyburner 2012-02-04 20:07:37

回答

1

这是很难用正则表达式来抓取原始HTML数据,因为模式可能会改变为不同的网站。使用可以查看DOM树的东西更容易。

如果您使用python,则可以使用BeautifulSoup。这是文档。它确实是你想要的。 Link

0

这是一个python代码。

>>> import re 
>>> s = '<span class="address">413 W. Street</span><br><span class="phone">218-999-1020</span>, <span class="region">WA</span> <span class="postal-code">87112</span><br>' 
>>> re.findall(r'address">(.*?)<.*phone">(.*?)<.*region">(.*?)<.*postal-code">(.*?)<', s) 
[('413 W. Street', '218-999-1020', 'WA', '87112')] 
>>> 

BTW, don't forget to see this

+0

对不起,我明白了这个问题。我试图删除这个问题,但没有能力。我在这里发布了新问题: http://stackoverflow.com/questions/9144544/regular-expressions-for-different-attributes – user807496 2012-02-04 21:13:21

0

你不应该使用正则表达式来解析HTML。这是很说明如下:

RegEx match open tags except XHTML self-contained tags

不过,如果你知道你想要解析HTML文本的确切结构,你可以尝试使用正则表达式(对于C#程序编写,所以可能会因你的代码的语言变化):

\<span[^">]*class="([^"]+)[^>]*>([^<]*) 

然后你就可以在第一个匹配组访问类(如地址,电话等)的名称,并在第2的值。