Python中的正则表达式无法通过re.findall()正常工作

时间:2018-11-18 14:03:42

标签: python regex

我正在尝试使用一个正则表达式,该正则表达式可以在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,但仍然无法正常工作。我想念什么?

1 个答案:

答案 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+

第一个捕获组将是@#,第二个捕获组将只是一个字母。在我的回答中,我不会打扰任何东西,而是依靠完全匹配才是您真正想要看到的东西。

旁注:如果要捕获@#之一,则可以使用:

[@#]

单个字符类就可以很好地做到这一点,而无需使用替换。