如何从推文中提取用户名?

时间:2009-04-11 18:33:56

标签: regex twitter

我有以下示例推文:

RT @user1: who are @thing and @user2?

我只想拥有 user1 thing user2

我可以用什么正则表达式来提取这三个名字?

PS:用户名必须只包含字母,数字和下划线。

5 个答案:

答案 0 :(得分:17)

测试:

/@([a-z0-9_]+)/i

Ruby(irb):

>> "RT @user1: who are @thing and @user2?".scan(/@([a-z0-9_]+)/i)
=> [["user1"], ["thing"], ["user2"]]

在Python中:

>>> import re
>>> re.findall("@([a-z0-9_]+)", "RT @user1: who are @thing and @user2?", re.I)
['user1', 'thing', 'user2']

在PHP中:

<?PHP
$matches = array();
preg_match_all(
    "/@([a-z0-9_]+)/i",
    "RT @user1: who are @thing and @user2?",
    $matches);

print_r($matches[1]);
?>

Array
(
    [0] => user1
    [1] => thing
    [2] => user2
)

答案 1 :(得分:2)

/(?<!\w)@(\w+)/

以上内容涵盖以下场景,本主题中的其他答案不包括:

  • 不应该是用户名的@符号,例如“我的电子邮件是test@example.com”
  • 仍然允许位于字符串开头的用户名,例如“@username lorem ipsum ......”

答案 2 :(得分:1)

尝试使用此正则表达式的迭代器(findall):

(@[\w-]+)

再见

答案 3 :(得分:0)

这应该这样做(为方便起见,我使用了命名捕获):

+ @(?[A-ZA-Z0-9 _] +):?(?[^ \ S] +)?[^ @] + @ [^ @] + @([A-ZA -Z0-9 _] +)

答案 4 :(得分:0)

在您的项目中包含推文文本库[1]是一个好主意,以解决此文本问题。

twttr.txt.extractMentions("a very generic twitt with some @mention");

[1] https://github.com/twitter/twitter-text-js