BeautifulSoup,简单的正则表达式问题

时间:2013-04-09 18:01:10

标签: python regex python-2.7 beautifulsoup

我只是遇到了正则表达式的障碍,并且不知道为什么这不起作用。

以下是BeautifulSoup doc所说的内容:

soup.find_all(class_=re.compile("itl"))
# [<p class="title"><b>The Dormouse's story</b></p>]

这是我的HTML:

<a href="exam.com" title="Keeper: Jay" class="pos_text">Aouate</a></span><span class="pos_text pos3_l_4">

我正在尝试匹配span标记(最后一个位置)。

>>> if soup.find(class_=re.compile("pos_text pos3_l_\d{1}")):
        print "Yes"

# prints nothing - indicating there is no such pattern in the html

所以,我只是重复BS4文档,除了我的正则表达式不起作用。果然,如果我用\d{1}替换4(原来在html中),它就会成功。

3 个答案:

答案 0 :(得分:2)

在正则表达式中尝试“\\ d”。它可能会将“\ d”解释为试图逃避“d”。

或者,原始字符串应该起作用。只需在正则表达式前放一个'r',就像这样:

re.compile(r"pos_text pos3_l_\d{1}")

答案 1 :(得分:2)

我不完全确定,但这对我有用:

soup.find(attrs={'class':re.compile('pos_text pos3_l_\d{1}')})

答案 2 :(得分:1)

您不匹配类,而是匹配特定顺序的特定类组合。

来自documentation

You can also search for the exact string value of the class attribute:

css_soup.find_all("p", class_="body strikeout")
# [<p class="body strikeout"></p>] But searching for variants of the string value won’t work:

css_soup.find_all("p", class_="strikeout body")
# []

所以你应该对post_text进行可能的拳头匹配,然后在结果中尝试匹配该搜索的匹配中的正则表达式