正则表达式抓住太多信息

时间:2012-05-26 14:07:14

标签: python regex

我的剧本:

def fetch_online():
    pattern = re.search('(<span class="on">)(.*)(</span>)', data)
    return pattern.group(2)

print fetch_online()

data内,有一行包含此内容:

        <b><span><span class="on">5879</span> users online</span></b>

但是,在运行时,输出为:

5879</span> users online

我该如何解决这个问题,以便它只在第一个</span>之前抓取数据?

2 个答案:

答案 0 :(得分:4)

在您的具体案例中,获得了<span class="on">)(\d+)</span>。在更一般的方法中,选择非贪婪:

<span class="on">(.*?)</span>

答案 1 :(得分:3)

使用非贪婪量词:(<span class="on">)(.*?)(</span>)

要了解有关非贪婪量词的更多信息,请阅读Regular-Expressions.info处的“懒惰而非贪婪”​​部分。

重申评论中已经说过的内容parsing HTML using regular expressions is highly discouraged