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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeautifulSoup4搜索标签由文本正则表达式相关的知识,希望对你有一定的参考价值。

我有这两个场景,我想使用正则表达式通过文本搜索标签。

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,}'))

谢谢

答案

冷杉搜索元素你可以使用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 ^$常数(注意,这将只匹配<p>内部的第一个169标签,而不是ab1234内部的第二个):

soup = BeautifulSoup("<p>169</p><p>ab1234</p>", 'html5lib')
print(soup.find('p', text=re.compile(r'^d+$')))

打印:

<p>169</p>

以上是关于BeautifulSoup4搜索标签由文本正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

linux正则表达式

正则表达式

grep及正则表达式

grep文本查看工具及正则表达式

grep命令及正则表达式

grep和egrep正则表达式