我有一个项目正在尝试分析推文数据库。我需要编写一个python regex表达式来提取涉及特定Twitter用户的推文。这是我要捕获的示例推文。
“那@A_Person真是个混蛋。”
我一直在尝试的正则表达式是
([^.?!]*)(\b([@]A_Person)\b)([^.?!]*)
但是它不起作用,我已经尝试了很多变体。任何意见,将不胜感激!
答案 0 :(得分:2)
\b
匹配单词边界,但是@
不是单词字符,因此如果在空格后出现,则匹配将失败。尝试删除那里的单词边界,并删除多余的组,并在[.?!]
的末尾添加一个字符集以包含最后的标点符号,您将得到:
[^.?!]*@A_Person\b.*?[^.?!]*[.?!]
您还可以考虑对字符串的开头或最后一句的结尾进行检查,否则引擎将通过 lot 步骤,同时遍历没有任何匹配项的区域。也许使用
(?:^|(?<=[.?!])\s*)
,它将与字符串的开头匹配,或者将在[.?!]
之后向后寻找,可能后面跟空格。把它们放在一起,你会得到
(?:^|(?<=[.?!])\s*)([^.?!]*@A_Person\b.*?[^.?!]*[.?!])
您想要的字符串在第一组中的位置(没有前导空格)。