【问题标题】:Regex - Combining an 'or' with a 'look-behind'正则表达式 - 将“或”与“后视”相结合
【发布时间】:2014-02-25 16:41:01
【问题描述】:

抱歉标题令人困惑。我试图找出一个简单的正则表达式问题,但无法弄清楚解决方案是什么。

我有一个来自较大 HTML 文档的 HTML sn-p。

  • <td class="grade">100.0</td>

  • <td class="teacher">Mathias, Jordan</td>

其他正则表达式将两者分开,给他们那些类名。我使用肯定的look-ahead 来检查.,(句号或逗号),并分别为他们分配年级或老师的班级。


问题来了,当我想检查这些标签之间的代码是否为空白时。

  • 即:<td class="grade"></td>

我想使用积极的回顾来检查班级是年级还是老师(grade|teacher)。另外,我想检查一下><(空标签的连接)之间是否真的没有任何东西。

到目前为止,这就是我所拥有的:(?<=.*(teacher|grade)*.+>?)[^.](?=</td>)

注意:这是在 Python 中

【问题讨论】:

  • HTML 不是一个钉子状的问题,放下那个正则表达式锤子。选择一个 HTML 解析器,比如 BeautifulSoup。
  • 强制,HTML 最好用 html 解析器解析,而不是正则表达式
  • 我将 Regex 与 BeautifulSoup 结合使用。考虑到 HTML 的大小及其复杂性,BeautifulSoup 在呈现 HTML 时毫无用处,除非 Regex 更改类以便 BeautifulSoup 可以解析并找到它。 @MartijnPieters
  • soup.find_all('td', class_=['teacher', 'grade'], text=True) 会找到你所有的元素。
  • @jayumz:如果输入的 HTML 没有类,则使用正则表达式匹配文本内容:soup.find_all('td', text=re.compile(',')) 查找所有带有逗号文本的 td 元素。

标签: python html regex lookbehind


【解决方案1】:

相信 BeautifulSoup 并使用正则表达式搜索,而不是预处理您的 HTML:

soup.find_all('td', text=re.compile(','))

在包含逗号的标记中查找所有带有 direct 文本的 <td> 元素。

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多