【问题标题】:python regular expression for retweets用于转推的python正则表达式
【发布时间】:2010-10-13 22:38:33
【问题描述】:

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

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 被拾取。)

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

【问题讨论】:

  • 我认为这里有答案:stackoverflow.com/questions/558105/…
  • Nm,因为这里需要转发/转发,所以只能部分回答,抱歉。
  • 感谢您传递这个 - 虽然只是部分答案,但绝对有用!

标签: python regex twitter


【解决方案1】:

试试

(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])

要获取单个句柄?

【讨论】:

  • 感谢您的快速回复!不幸的是,这似乎不起作用,除非我输入错误:tweet='foobar RT@one, @two:@three barfoo' m=re.search(r'(RT|retweet|from|via)(? :\b\W*@(\w+))+',tweet) m.groups() ('RT', 'three') 但我会继续阅读 (?:...)。谢谢。
  • 感谢马库斯。我基本上最终采用了与此类似的方法,但由于无法提出一个正则表达式解决方案而感到困扰。欣赏它。
猜你喜欢
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多