Python 搜索正则表达式时忽略子节点
我想用BeautifulSoup在大型文本文档中标识拆分点。因此,我制定了一个正则表达式来查找出现特定字符串的标记。问题是,如果在我搜索的字符串中有进一步的格式化/子节点,则它不起作用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
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”
条件来解决。