我想用正则表达式读取标签中的元素,例如:
<td>Stuff Here</td>
<td>stuff
</td>
我正在使用以下内容:re.findall(re.compile('<td>(.*)</td>'), str(line).strip())
为什么我可以读取第一个<td>
标签,而不能读取第二个标签?
对于一般情况,您不能使用正则表达式来解析标记。你能做的最好的就是开始使用 HTML 解析器,那里有很多不错的选择,恕我直言Beautiful Soup是一个不错的选择。
首先,我假设它line
包含整个 HTML 文档,而不是其名称所暗示的单行。
一个问题是,默认情况下,.
与换行符不匹配:
In [3]: re.findall('.', '\n')
Out[3]: []
您要么需要删除嵌入的换行符(strip()
顺便说一句),要么使用re.DOTALL
:
In [4]: re.findall('.', '\n', re.DOTALL)
Out[4]: ['\n']
此外,您应该将 更改.*
为.*?
以使表达式非贪婪。
另一个更大的问题是基于正则表达式的方法不足以解析任意 HTML。请参阅RegEx match open tags except XHTML self-contained tags以获得很好的讨论。