为什么这个正则表达式不起作用:r'。* logo。*'

时间:2014-02-10 22:24:52

标签: python regex string

我希望以下正则表达式匹配,但事实并非如此。为什么呢?

import re
html = '''
                <a href="#">
                    <img src="logo.png" alt="logo" width="100%">
                    </img>
                 </a>
  '''
m = re.match( r'.*logo.*', html, re.M|re.I)

if m: 
    print m.group(1)
if not m:
    print "not found"

3 个答案:

答案 0 :(得分:11)

我们不使用正则表达式来解析HTML。

在我之后重复:我们不使用REGEX到PARSE HTML。

也就是说,它不起作用,因为re.match显式只检查行的开头。请改用re.searchre.findall

答案 1 :(得分:1)

使用re.searchre.match假设匹配位于字符串的开头。

答案 2 :(得分:1)

您需要包含re.DOTALL(== re.S)标志以允许。匹配换行符(\ n)。

但是,如果“logo”出现在其中的任何位置,则返回整个文档;非常有用。

稍微好一点

import re
html = """
    <a href="#">
        <img src="logo.png" alt="logo" width="100%" />
    </a>
"""

match_logo = re.compile(r'<[^<]*logo[^>]*>', flags = re.I | re.S)

for found in match_logo.findall(html):
    print(found)

返回

<img src="logo.png" alt="logo" width="100%" />

更好的是

from bs4 import BeautifulSoup

pg = BeautifulSoup(html)
print pg.find("img", {"alt":"logo"})