用于转发的Python正则表达式

问题描述 投票:0回答:2

我正在开发一个正则表达式,它将从推文中提取转发关键字和用户名。这是一个例子,用一个相当糟糕的正则表达式来完成这项工作:

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*
模式并使它们成为一个可变的数字,这样如果@four被添加到@ Three之后,它也会被提取。我尝试了很多排列来用
+
重复此操作,但没有成功。

我也希望它能用于类似的事情

tweet='foobar RT@one, RT @two: RT @three barfoo';

这可以通过重新查找器来实现如果图案不重叠。 (我有一个版本,其中模式确实重叠,因此只有第一个 RT 被拾取。)

非常感谢任何帮助。谢谢。

python regex twitter
2个回答
3
投票

尝试

(RT|retweet|from|via)(?:\b\W*@(\w+))+'

\b\W*@(\w+)
括在“(?:...)”中可以让您对术语进行分组以进行重复,而无需捕获聚合。

我不确定我是否遵循了您问题的第二部分,但我认为您可能正在寻找涉及以下结构的内容:

(?:(?!RT|@).)

它将匹配任何不是“@”或“RT”开头的字符,同样不会捕获它。

那么,怎么样:

(RT|retweet|from|via)((?:\b\W*@\w+)+)

然后进行后期处理

re.split(r'@(\w+)' ,m.groups()[1])

要获取单独的句柄吗?


0
投票

可以匹配大多数报告/转发/修改后的帖子的正则表达式如下。

\brt\b|#retweet|#modifiedpost|via @|\bmp\b|@\w*:|#rt|#mp|(rt|mt):? @\w*:?|
像这样的东西应该可以抓住他们。 其他相关帖子有 尝试使用正则表达式和 PHP 查找 Twitter RT 以及如何去掉转发的开头? 编辑:添加了其他回复

© www.soinside.com 2019 - 2024. All rights reserved.