【问题标题】:Regex to read tags Python正则表达式读取标签 Python
【发布时间】:2013-06-12 16:19:13
【问题描述】:

我想用正则表达式读取标签中的元素,例如:

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

我正在使用以下内容:re.findall(re.compile('&lt;td&gt;(.*)&lt;/td&gt;'), str(line).strip())

为什么我能读到第一个&lt;td&gt; 标签,而不能读到第二个?

【问题讨论】:

  • 另见this答案。

标签: python html regex tags


【解决方案1】:

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

【讨论】:

  • Beautiful Soup 的现代版本已切换到在后端使用 lxml.html。为什么不直接使用呢?
【解决方案2】:

首先,我假设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 进行精彩讨论。

【讨论】:

  • 我的line 存储&lt;td&gt;[...]&lt;/td&gt;,它用于for 循环
  • 其实我把答案改成了:cell = line.find('td', text = True)
猜你喜欢
  • 2015-09-15
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 2017-01-20
  • 2014-06-19
  • 1970-01-01
相关资源
最近更新 更多