python - 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,}'))
谢谢
解决方案
您可以使用的冷杉搜索元素lambda
和tag.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>
推荐阅读
- rust - 是否可以将两箱库中的 proc-macro 箱视为实现细节而不遵循语义版本控制?
- html - 为什么父母和孩子的div有相同的高度
- java - 如何在构造函数中明确表示可以插入一个对象以及该对象的所有子类?
- java - 我需要更改此函数以计算正确的平均值吗?
- javascript - 尝试一个可编辑的 vue.js 自动补全组件
- windows - Windows 10 上的 Windows 启动中自动运行 devserver 17 的问题
- php - 如何通过像下面的脚本这样的 php 从 xml 的一个标签中获取数据?
- java - 在java中消费Neo4j驱动的结果
- sql - 我怎样才能写出同月雇佣的员工和订单?
- r - 对返回原始维数的数组应用函数