re.compile无法正常工作

时间:2014-10-04 09:10:04

标签: python regex python-2.7 beautifulsoup

我试图在bs4中找到标签,其中文字格式为:' Firma:...........'。问题是re.compile根本不起作用。我无法知道自己在做什么。

这是html的代码:

<span class="date">
    Firma:
    <b>Agedr js</b>
</span>

以下是查找此标记的代码:

re.DOTALL
attributes = soup.findAll('span', class_='date')
        for attribute in attributes: 
            if  attribute == re.compile('Firma: .*'):
                firma = attribute.text
                print firma

我想我在文本中使用了一些特殊的字符&#39; Firma:&#39;但我找不到它。 问题出在哪里?

编辑: 方式不起作用:

我尝试re.compile('Firma.*')

re.DOTALL

if attribute == ...切换为attribute.contents[0] == ...

1 个答案:

答案 0 :(得分:1)

代码将已编译的模式对象与Tag对象进行比较。它总会失败。

>>> import re
>>> re.compile('a') == 'a'  # PatternObject == str  => always false
False
>>> re.compile('a').search('a')
<_sre.SRE_Match object at 0x0000000002933168>
>>> re.search('a', 'a')
<_sre.SRE_Match object at 0x00000000029331D0>

您应该将PatternObject.search(或re.search)与str一起使用(略微修改模式不包含空格):

if re.compile('Firma:.*').search(attribute.text):
    firma = attribute.text
    print firma

但是对于这个简单的情况,你最好使用in运算符:

if 'Firma:' in attribute.text:
    ....