【问题标题】:BeautifulSoup4 search tag by text regexBeautifulSoup4 通过文本正则表达式搜索标签
【发布时间】:2018-08-03 16:47:51
【问题描述】:

我有这两种情况,我想使用正则表达式通过其文本搜索标签。

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,}'))

谢谢

【问题讨论】:

    标签: python parsing beautifulsoup html-parsing


    【解决方案1】:

    你可以使用lambdatag.text的fir搜索元素:

    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 ^$ 常量(注意,这将只匹配第一个 &lt;p&gt; 标记和 169 内部,而不是第二个 @ 987654330@内):

    soup = BeautifulSoup("<p>169</p><p>ab1234</p>", 'html5lib')
    print(soup.find('p', text=re.compile(r'^\d+$')))
    

    打印:

    <p>169</p>
    

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 2014-03-25
      • 2014-02-21
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多