正则表达式读取标签Python

时间:2013-06-16 16:08:36

标签: python html regex tags

我想用regex读取标签内的元素,例如:

<td>Stuff Here</td>
<td>stuff 
</td>

我使用以下内容:re.findall(re.compile('<td>(.*)</td>'), str(line).strip())

为什么我可以阅读第一个<td>标签,但不是第二个?{/ p>

2 个答案:

答案 0 :(得分:5)

对于一般情况,您can't use regular expressions for parsing markup。你可以做的最好的事情是开始使用HTML解析器,那里有很多good options,恕我直言Beautiful Soup是一个不错的选择。

答案 1 :(得分:2)

首先,我假设line包含整个HTML文档,而不仅仅是其名称所暗示的单行。

一个问题是,默认情况下,.与换行符不匹配:

In [3]: re.findall('.', '\n')
Out[3]: []

您需要删除嵌入的换行符(strip()不执行BTW),或使用re.DOTALL

In [4]: re.findall('.', '\n', re.DOTALL)
Out[4]: ['\n']

此外,您应该将.*更改为.*?以使表达式非贪婪。

另一个更大的问题是,基于正则表达式的方法不足以解析任意HTML。请参阅RegEx match open tags except XHTML self-contained tags进行讨论。