在 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*>))'
此正则表达式尝试隔离以“<th>
”开头并以“</th>
”结尾的字符串,前提是在下一个模式开始之前同一模式中不再有“</th>
” .该模式成功地隔离了“正确的”标头(标头本身没有</th>
s),但未能正确解析“不正确的”标头,在找到的第一个</th>
处停止字符串。
我假设我的前瞻被错误地实现了。任何建议将不胜感激。
谢谢!
【问题讨论】:
【参考方案1】:这样的事情怎么样:
(?<=<th>).*(?=<\/th>)
演示:https://regex101.com/r/HiL3Zi/1
【讨论】:
感谢亨利。它完美地工作,除了它需要遵循在“th”(即)之后允许无限空白的html约定。我可以很容易地在你的正则表达式的第二组中解释这一点,但由于非固定宽度的后视,我不能在第一组中解释。知道如何解决这个问题吗?再次感谢! 分析你的,我想你可能只需要让正则表达式“贪婪”而不是“懒惰”:<th\s*>([\S\s]*)<\/th\s*>(?!(?:<\/th\s*>))
演示:regex101.com/r/HiL3Zi/2以上是关于在 HTML 单元格中使用 HTML 解析 Python 正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Jupyter Lab 单元格中显示 Pyvis HTML 时出错