在 HTML 单元格中使用 HTML 解析 Python 正则表达式 [重复]

Posted

技术标签:

【中文标题】在 HTML 单元格中使用 HTML 解析 Python 正则表达式 [重复]【英文标题】:Python Regex parsing with HTML inside HTML cells [duplicate] 【发布时间】:2018-05-10 04:29:16 【问题描述】:

编辑:我注意到这被认为是重复的,但事实并非如此,因为重复的解决方案涉及使用 beautifulsoup 进行解析。我知道beautifulsoup是解决这个问题的更好方法,但是为了学习,我一直在尝试使用Regex。

我是 Regex 的新手,正在为 html 表开发基于 Python 的 Regex 解析器。到目前为止,我已经设法生成正确解析正常行、单元格和标题的模式,但我希望修改我的正则表达式以适应单元格和标题中的 HTML。本质上,我希望不评估较大单元格中的 HTML 代码,执行以下操作:

found = re.findall(isHeader,"<th>Student</th> Name</th>")
found = "Student</th> Name"

在做了一些研究之后,我正在尝试使用前瞻来解决问题:

isHeader = r'<th\s*>([\S\s]*?)</th\s*>(?!(?:</th\s*>))'

此正则表达式尝试隔离以“&lt;th&gt;”开头并以“&lt;/th&gt;”结尾的字符串,前提是在下一个模式开始之前同一模式中不再有“&lt;/th&gt;” .该模式成功地隔离了“正确的”标头(标头本身没有&lt;/th&gt;s),但未能正确解析“不正确的”标头,在找到的第一个&lt;/th&gt; 处停止字符串。

我假设我的前瞻被错误地实现了。任何建议将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

这样的事情怎么样:

(?<=<th>).*(?=<\/th>)

演示:https://regex101.com/r/HiL3Zi/1

【讨论】:

感谢亨利。它完美地工作,除了它需要遵循在“th”(即)之后允许无限空白的html约定。我可以很容易地在你的正则表达式的第二组中解释这一点,但由于非固定宽度的后视,我不能在第一组中解释。知道如何解决这个问题吗?再次感谢! 分析你的,我想你可能只需要让正则表达式“贪婪”而不是“懒惰”:&lt;th\s*&gt;([\S\s]*)&lt;\/th\s*&gt;(?!(?:&lt;\/th\s*&gt;)) 演示:regex101.com/r/HiL3Zi/2

以上是关于在 HTML 单元格中使用 HTML 解析 Python 正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Jupyter Lab 单元格中显示 Pyvis HTML 时出错

如何在时事通讯的 html 单元格中均匀分布内容?

在 GridView 单元格中呈现 HTML 标签

无法在 tableview 单元格中显示解析的 imageView

html中如何让单元格中的文字离左边框一定距离

如何在 html 表格单元格中的 <TD> 末尾插入文本