我只是遇到了正则表达式的障碍,并且不知道为什么这不起作用。
以下是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中),它就会成功。
答案 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)
您不匹配类,而是匹配特定顺序的特定类组合。
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进行可能的拳头匹配,然后在结果中尝试匹配该搜索的匹配中的正则表达式