【问题标题】:using regex on beautiful soup tags在漂亮的汤标签上使用正则表达式
【发布时间】:2012-10-12 05:12:49
【问题描述】:

我最近一直在使用美丽的汤 4,我一直在努力理解这方面的一些基础知识(出于某种原因,我对 bs3.x 非常满意)。因此,例如,让我们从做一些简单的事情开始,例如:

data=soup.find_all('h2')

这给我带来了类似的东西:

<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>

这很好。但是当我想对上面的字符串进行正则表达式时,使用一些类似的东西(假设上面存储在“temp”中):

t=str(re.compile(r"""<h2><a href=\\"/accurate(.*?)\\">""").search(str(temp)).group(1))

我明白了:

AttributeError: 'NoneType' object has no attribute 'group'

我觉得很奇怪 - 因为,当我在 python 解释器上执行时,类似:

k=r"""<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>"""

然后使用上面的正则表达式,一切正常。我想知道为什么 bs4 生成的“标签”类型似乎不可正则表达式。现在我觉得也许我在做一些愚蠢的事情,或者在我不知道的 bs3.x 和 bs4 之间发生了一些变化。对此的任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您在 BS4 正则表达式中有 &lt;h3&gt; 而在其他任何地方都有 &lt;h2&gt; 是一个错字,对吧?
  • @PedroRomano 是的,这是一个错字 - 很抱歉 - 我现在已经更正了。
  • 你能显示BS给出的结果的repr吗?
  • 我会用 repr 输出回复你。
  • @Bakuriu:我已经使用 repr 输出找出了问题所在。这是我的错误——我以前不知道 repr 命令。您能否将其发布为答案,我很乐意接受它作为正确答案。

标签: python regex python-2.7 beautifulsoup


【解决方案1】:

您应该尝试查看字符串的repr

>>> a=r"""<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>"""
>>> print repr(a)
'<h2><a href=\\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\\">more-accurate-data</a></h2>'

并且正则表达式适用于这种表示:

>>> regex = re.compile(r"""<h2><a href=\\"/accurate(.*?)\\">""")
>>> regex.match(a)
<_sre.SRE_Match object at 0x20fbf30>

问题是美丽汤的结果是不同的,因为你没有打印它的 repr。在处理正则表达式时,最好检查所涉及的字符串的 repr 以避免发生此类情况。

【讨论】:

  • 再次感谢您的精彩提示!
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 2020-03-17
  • 2015-05-03
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
相关资源
最近更新 更多