程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2020-02-28 15:15     阅读(1223)     评论(0)     点赞(1)     收藏(2)


我想使用BeautifulSoup在大型文本文档中标识一个拆分点。因此,我制定了一个正则表达式来查找其中出现特定字符串的Tag。问题是,如果我正在搜索的字符串中还有其他格式/子节点,则它不起作用。

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

输出应该是pTag对象。


解决方案


您在这里遇到的问题是,您要查找的文本strongp节点内被标签分开,因此使用text 参数in 进行正则表达式搜索.find无效,这只是在BS中实现的方式。

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

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]这与s正则表达式中的相同



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/236184/0e0fa8757643bbf372f7/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)