【问题标题】:BeautifulSoup exact regex match on text [duplicate]BeautifulSoup 文本上的精确正则表达式匹配 [重复]
【发布时间】:2018-12-14 12:13:30
【问题描述】:

假设我有以下 HTML:

html = """
<tag1> What I want </tag1>
<tag1> Not What I want - really not </tag1>
<tag1> What I want </tag1>
<tag1> What I
       Want </tag1>
"""

我想提取除第 2 项之外的所有内容 - 让标签完全包含“我想要的”字样,并且没有其他字母数字字符。我尝试将 BeautifulSoup4 的 find_all 与正则表达式过滤器一起使用:

html.find_all(string=re.compile(r"\W*what\W*I\W*want\W*", re.IGNORECASE))

但这会返回上一个示例中的所有标签。我想要一个完全匹配,而不是“包含”。

【问题讨论】:

  • 有什么要求?您不希望它匹配的第二个标签是什么?是连字符吗?
  • @emsimpson92 编辑了问题 - 我想要标签的字符串内容完全匹配

标签: python regex beautifulsoup


【解决方案1】:

^$ 字符可用于标记行的开头和结尾。

^\W*what\W*I\W*want\W*$ 替换您的正则表达式应该适用于您的情况。

【讨论】:

  • @emsimpson92 是的,他没有直接匹配 html 字符串。他正在使用 BeautifulSoup,它只比较标签内容。您是否为正确阅读问题而烦恼?
  • It does, \W 将匹配换行符。
  • 好的,这确实有效,谢谢! - 出于好奇,BeautifulSoup 中是否没有相当于re.match 的函数?
  • 根据(文档)[crummy.com/software/BeautifulSoup/bs4/doc/…,BeautifulSoup 使用 search() 方法进行正则表达式,但我相信在您的模式前添加 ^ 应该足以获得相同的行为。跨度>
猜你喜欢
  • 1970-01-01
  • 2012-03-13
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多