BeautifulSoup4按文本正则表达式搜索标记

2024-09-29 17:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我假设这不起作用,因为里面的标签实际上包含我的文本

还有,如何找到只包含数字的标记

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

谢谢


Tags: textname标记文本re场景数字标签
1条回答
网友
1楼 · 发布于 2024-09-29 17:18:19

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

相关问题 更多 >

    热门问题