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

Python--Regex--如何在两组字符串之间查找字符串,python,regex,string,tags,Python,Regex,String,Tags,考虑以下几点: <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

考虑以下几点:

<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中的正则表达式删除sitemap行

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

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

'/<a(.*?)a>/i'
“//我”
但是,有多个定位标记。还有多个热链接,所以我们也不能真正使用它们?

不要使用正则表达式。使用,一个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>
从美化组导入美化组
html=\
"""
"""
soup=BeautifulSoup(html)
soup.findAll(“div”,id=“hotlink”)[2].a
# 

用正则表达式解析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

你应该考虑使用Python HTML解析器。< /P>

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>
无论如何,使用正则表达式的特别解决方案是

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)
重新导入
data=”“”
"""
e=重新编译(“”,“”,“”,“”,“”)
如果需要解析HTML,请使用或

另外,你真正需要做什么?找到最后一个链接?找到第三个链接?找到指向/sitemap的链接?你的问题不清楚。你需要对数据做什么


如果确实需要使用正则表达式,请查看
findall

以提取标语的内容:

    <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'
>>重新导入
>>>s='''
'''
>>>m=重新编译(r“”)。搜索(s)
>>>m组(1)
“站点地图”

您可能会听说正则表达式不适合解析HTML这样的上下文无关语言。如果您是生成该HTML的人,那么值得注意的是,像这样的多个相同的
id=
属性无效。
类=
更合适。如果您将
*
替换为
(?:[^事实上,将sitemap替换为XYZ,因为它实际上可以是任何东西。我只知道它是hotlinlist分区中的第三个分区。使用的html模式可以重复多次。比方说,我想取出ebay上列出的所有智能手机。我会知道找到的每个智能手机都会重复上述模式,但是,XYZ可以是iphone、blackberry、Nokia或任何其他智能手机。不可能有任何项目或100。因此,我在寻找这样的东西:找到重复模式,然后拿出智能手机线路,列出智能手机列表。我喜欢它回答问题。它还帮助我理解regex,无论你信不信。