我正在尝试使用一个正则表达式,该正则表达式可以在Javascript中工作(匹配提及和主题标签),但是在Python中,它仅匹配第一个字符,我不知道为什么:
>>> s="hi @user I am @user2 using #hashtag and
#hashtag2 "
>>> re.findall(r"([@]|[#])([a-z])\w+", s)
[('@', 'u'), ('@', 'u'), ('#', 'h'), ('#', 'h')]
我也尝试使用参数flags=re.I|re.M
,但仍然无法正常工作。我想念什么?
答案 0 :(得分:1)
以下内容似乎对我有用:
s = "hi @user I am @user2 using #hashtag and #hashtag2 "
res = re.findall(r"[@#][a-z]\w+", s)
print(res)
['@user', '@user2', '#hashtag', '#hashtag2']
似乎正在发生的事情是您正在打印两个捕获组的结果。仔细查看您的模式:
([@]|[#])([a-z])\w+
第一个捕获组将是@
或#
,第二个捕获组将只是一个字母。在我的回答中,我不会打扰任何东西,而是依靠完全匹配才是您真正想要看到的东西。
旁注:如果要捕获@
或#
之一,则可以使用:
[@#]
单个字符类就可以很好地做到这一点,而无需使用替换。