我正在研究一个正则表达式,它将从推文中提取转推关键字和用户名。这是一个例子,用一个相当糟糕的正则表达式来完成这项工作:
tweet='foobar RT@one, @two: @three barfoo'
m=re.search(r'(RT|retweet|from|via)\b\W*@(\w+)\b\W*@(\w+)\b\W*@(\w+)\b\W*',tweet)
m.groups()
('RT', 'one', 'two', 'three')
我想要的是压缩重复的\b\W*@(\w+)\b\W*
模式并使它们成为可变数字,这样如果在@three 之后添加@four,它也会被提取。我已经尝试了很多排列来重复这一点,但+
没有成功。
我也希望这适用于类似的东西
tweet='foobar RT@one, RT @two: RT @three barfoo';
如果模式不重叠,可以使用 re.finditer 来实现。(我有一个模式重叠的版本,所以只有第一个 RT 被拾取。)
任何帮助是极大的赞赏。谢谢。