BeautifulSoup4通过文本正则表达式搜索标签

时间:2018-08-03 16:47:52

标签: python parsing beautifulsoup html-parsing

在这两种情况下,我想使用正则表达式按标签的文本搜索标签。

soup = BeautifulSoup("<B><A NAME="toc96446_13"></A>TEXT </B></P>", "html5lib")
soup.find('b', text=re.compile('TEXT'))

我认为这是行不通的,因为其中实际上包含我的TEXT的标签。

我又如何找到仅包含数字的标签?

soup = BeautifulSoup("<p>169</p>", "html5lib")
soup.find('p', text=re.compile(r'[0-9]{1,}'))

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用lambdatag.text的杉木搜索元素:

from bs4 import BeautifulSoup
import re

data = """
<B><A NAME="toc96446_13"></A>TEXT</B></P>
"""
soup = BeautifulSoup(data, 'html5lib')
print(soup.find(lambda t: t.name=='b' and re.search(r'TEXT', t.text)))

打印:

<b><a name="toc96446_13"></a>TEXT</b>

个数字,您可以利用regexp ^$常量(请注意,这将仅匹配带有{ {1}}内,而不是<p>内第二):

169

打印:

ab1234