首页 > 解决方案 > 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,}'))

谢谢

标签: pythonparsingbeautifulsouphtml-parsing

解决方案


您可以使用的冷杉搜索元素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>

推荐阅读