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

Python 搜索正则表达式时忽略子节点,python,regex,beautifulsoup,Python,Regex,Beautifulsoup,我想用BeautifulSoup在大型文本文档中标识拆分点。因此,我制定了一个正则表达式来查找出现特定字符串的标记。问题是,如果在我搜索的字符串中有进一步的格式化/子节点,则它不起作用 t1 = BeautifulSoup("<p class=\"p p8\"><strong>Question-And-Answer</strong></p>") t2 = BeautifulSoup("<p class=\"p p8\"><str

我想用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
t1=beautifulsou(

问答 t2=BeautifulSoup(“

问题--答案

”) t1.find(text=re.compile(“问题[s]*-和答案[s]*”,re.IGNORECASE)) >>>“问答” t2.find(text=re.compile(“问题*-和答案*”,re.IGNORECASE)) >>>没有

输出应该是
p
标记对象。

这里的问题是,您正在查找的文本在
p
节点内被
strong
标记分割,因此在
.find
中使用
text
参数的正则表达式搜索将不起作用,这只是它在BS中的实现方式

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

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>
print(t2.find(lambda t:t.name==“p”并重新搜索(r'Questions*-and Answers*',t.text)))
#=>

问题--答案


请注意,
[s]
与正则表达式中的
s
相同。

不确定这是否有用,但如果您进行
重新匹配(“问题*-和答案*”,t2.text)。group()
,它将输出您想要的结果。但正如我所说,我不确定这是否有助于你前进。我下面的答案解决了问题吗?请告知仍缺少什么或需要澄清什么。这种方法的问题是,如果包含所需文本,它将匹配完整的html。为了澄清,请尝试使用

问题--答案

作为输入来运行代码。@KeyurPotdar如果OP只想用这些文本获取
p
元素,那么可以通过添加
t.name==“p”
条件来解决。