Python——Regex——如何在两组字符串之间找到一个字符串

2024-04-29 22:16:54 发布

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

请考虑以下几点:

<div id=hotlinklist>
  <a href="foo1.com">Foo1</a>
  <div id=hotlink>
    <a href="/">Home</a>
  </div>
  <div id=hotlink>
    <a href="/extract">Extract</a>
  </div>
  <div id=hotlink>
    <a href="/sitemap">Sitemap</a>
  </div>
</div>

python中,如何使用regex取出站点地图行?

<a href="/sitemap">Sitemap</a>

以下内容可用于拉出锚定标记。

'/<a(.*?)a>/i'

但是,有多个锚定标记。还有多个热链接,所以我们也不能真正使用它们?


Tags: 标记divcomidhomeextracthrefsitemap
3条回答

用正则表达式解析HTML是个坏主意!

想想下面这段html

<a></a > <!-- legal html, but won't pass your regex -->

<a href="/sitemap">Sitemap<!-- proof that a>b iff ab>1 --></a>

这样的例子还有很多。正则表达式对很多事情都有好处,但对解析HTML却没有好处。

您应该考虑使用Beautiful Souppython HTML解析器。

无论如何,使用regex的特别解决方案是

import re

data = """
<div id=hotlinklist>
  <a href="foo1.com">Foo1</a>
  <div id=hotlink>
    <a href="/">Home</a>
  </div>
  <div id=hotlink>
    <a href="/extract">Extract</a>
  </div>
  <div id=hotlink>
    <a href="/sitemap">Sitemap</a>
  </div>
</div>
"""

e = re.compile('<a *[^>]*>.*</a *>')

print e.findall(data)

输出:

>>> e.findall(data)
['<a href="foo1.com">Foo1</a>', '<a href="/">Home</a>', '<a href="/extract">Extract</a>', '<a href="/sitemap">Sitemap</a>']

为了提取标语的内容:

    <a href="/sitemap">Sitemap</a>

。。。我会用:

    >>> import re
    >>> s = '''
    <div id=hotlinklist>
    <a href="foo1.com">Foo1</a>
      <div id=hotlink>
        <a href="/">Home</a>
      </div>
      <div id=hotlink>
        <a href="/extract">Extract</a>
      </div>
      <div id=hotlink>
        <a href="/sitemap">Sitemap</a>
      </div>
    </div>'''
    >>> m = re.compile(r'<a href="/sitemap">(.*?)</a>').search(s)
    >>> m.group(1)
    'Sitemap'

不要使用正则表达式。使用HTML解析器BeautfulSoup

from BeautifulSoup import BeautifulSoup

html = \
"""
<div id=hotlinklist>
  <a href="foo1.com">Foo1</a>
  <div id=hotlink>
    <a href="/">Home</a>
  </div>
  <div id=hotlink>
    <a href="/extract">Extract</a>
  </div>
  <div id=hotlink>
    <a href="/sitemap">Sitemap</a>
  </div>
</div>"""

soup = BeautifulSoup(html)
soup.findAll("div",id="hotlink")[2].a

# <a href="/sitemap">Sitemap</a>

相关问题 更多 >