Python - Regex - 如何在两组字符串之间查找字符串

un3*_*33k 6 python regex tags string

考虑以下:

<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>
Run Code Online (Sandbox Code Playgroud)

您如何在python中使用regex取出sitemap行?

<a href="/sitemap">Sitemap</a>
Run Code Online (Sandbox Code Playgroud)

以下内容可用于拉出锚标签.

'/<a(.*?)a>/i'
Run Code Online (Sandbox Code Playgroud)

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

Unk*_*own 13

不要使用正则表达式.使用BeautfulSoup,一个HTML解析器.

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>
Run Code Online (Sandbox Code Playgroud)


Ela*_*ich 6

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

想想下面这段html

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

<a href="/sitemap">Sitemap<!-- proof that a>b iff ab>1 --></a>
Run Code Online (Sandbox Code Playgroud)

还有更多这样的例子.正则表达式适用于许多内容,但不适用于解析HTML.

你应该考虑使用Beautiful Soup python HTML解析器.

无论如何,使用正则表达式的临时解决方案是

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)
Run Code Online (Sandbox Code Playgroud)

输出:

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


Ale*_*lex 5

为了提取标语的内容:

    <a href="/sitemap">Sitemap</a>
Run Code Online (Sandbox Code Playgroud)

......我会用:

    >>> 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'
Run Code Online (Sandbox Code Playgroud)