搜索正则表达式时忽略子节点

2024-10-05 15:21:53 发布

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

我想用BeautifulSoup标识一个大文本文档中的拆分点。因此,我制定了一个正则表达式来查找出现特定字符串的标记。问题是,如果在我搜索的字符串中有进一步的格式化/子节点,它将不起作用。你知道吗

t1 = BeautifulSoup("<p class=\"p p8\"><strong>Question-And-Answer</strong></p>")

t2 = BeautifulSoup("<p class=\"p p8\"><strong>Question</strong>-<strong>And</strong>-<strong>Answer</strong></p>")

t1.find(text = re.compile("Question[s]*-And-Answer[s]*", re.IGNORECASE))
>>> 'Question-And-Answer'

t2.find(text = re.compile("Question[s]*-And-Answer[s]*", re.IGNORECASE))
>>> None

输出应该是p标记对象。你知道吗


Tags: and字符串textanswer标记refindclass
1条回答
网友
1楼 · 发布于 2024-10-05 15:21:53

这里的问题是,您要查找的文本在p节点内用strong标记分割,因此在.find中使用text参数的regex搜索将不起作用,这只是它在BS中的实现方式。你知道吗

如果您知道文本在p节点中,可以在.find调用中使用lambda表达式,并对每个p标记的text属性运行regex搜索,以找到所需的元素:

print(t2.find(lambda t: t.name == "p" and re.search(r'Questions*-And-Answers*', t.text)))
# => <p class="p p8"><strong>Question</strong>-<strong>And</strong>-<strong>Answer</strong></p>

注意[s]与regex中的s相同。你知道吗

相关问题 更多 >