【问题标题】:Regular expression to search for specific twitter username用于搜索特定 Twitter 用户名的正则表达式
【发布时间】:2019-04-01 18:09:18
【问题描述】:

我有一个项目,我正在尝试分析推文数据库。我需要编写一个 python 正则表达式来提取提到特定 Twitter 用户的推文。这是我想捕获的示例推文。

“@A_Person 真是个混蛋。”

我一直在尝试的正则表达式是

([^.?!]*)(\b([@]A_Person)\b)([^.?!]*)

但它不起作用,我尝试了很多变化。任何意见,将不胜感激!

【问题讨论】:

  • if '@A_Person' in tweet: 怎么样?
  • 为什么不简单地[@]A_Person\b

标签: python regex twitter


【解决方案1】:

\b 匹配一个单词边界,但@ 不是单词字符,所以如果它出现在空格之后,匹配会失败。尝试删除那里的单词边界,并删除额外的组,并在末尾添加一个字符集 [.?!] 以包含最终的标点符号,你会得到:

[^.?!]*@A_Person\b.*?[^.?!]*[.?!]

您还可以考虑检查字符串的开头或最后一句的结尾,否则引擎将在经过没有任何匹配的区域时执行 很多 步骤。也许使用

(?:^|(?<=[.?!])\s*)

将匹配字符串的开头,或者将向后查找[.?!],可能后跟空格。把它们放在一起,你就得到了

(?:^|(?<=[.?!])\s*)([^.?!]*@A_Person\b.*?[^.?!]*[.?!])

您想要的字符串在第一组中的位置(没有前导空格)。

https://regex101.com/r/447KsF/3

【讨论】:

  • .*?[.?!] 在性能方面比[^.?!]*[.?!] 差很多。最好的做法是避免使用贪婪的量词,如果可以的话。除非一个人想留在一条线上。
  • 谢谢,你是对的,我需要记住,为了换取正则表达式的性能,少一点代码重复可能不值得
猜你喜欢
  • 2011-09-02
  • 2011-01-19
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2023-01-25
  • 1970-01-01
相关资源
最近更新 更多