在美丽的汤标签上使用正则表达式

时间:2012-10-22 11:37:38

标签: python regex python-2.7 beautifulsoup

我最近一直在使用漂亮的汤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之间的某些事情发生了变化,我不知道。任何有关这方面的帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

您应该尝试查看字符串的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以避免这样的事情。