我想提取中文微博用户名。所以我使用这段代码:
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'#中国联通网上营业厅# #北京地铁# ']
答案 0 :(得分:6)
因为你的模式很贪婪。
re.findall("@.*?(?=\\s)", sentence, re.I)
或
re.findall(r"@\S*", sentence, re.I)
\S*
应匹配零个或多个非空格字符。