为什么这个正则表达式只匹配一次?

时间:2015-08-31 15:47:01

标签: python regex

我想提取中文微博用户名。所以我使用这段代码:

def atExtractor(sentence):
    return re.findall("@.*\\s", sentence, re.I)

然后我提取这句话:

atExtractor(u"@中国联通网上营业厅 @北京地铁 北京地铁10号线,从惠新西街南口到海淀黄庄")

得到:

[u'@中国联通网上营业厅 @北京地铁 ']

为什么正则表达式只获得一个匹配而不是两个?当我想提取hashtag时会发生同样的问题:

 def activityExtractor(sentence):
        return re.findall("#.*#", sentence, re.I)
 activityExtractor(u"#中国联通网上营业厅# #北京地铁# 北京地铁10号线")

得到:

[u'#中国联通网上营业厅# #北京地铁# ']

1 个答案:

答案 0 :(得分:6)

因为你的模式很贪婪。

re.findall("@.*?(?=\\s)", sentence, re.I)

re.findall(r"@\S*", sentence, re.I)

\S*应匹配零个或多个非空格字符。