我有以下示例推文:
RT @user1: who are @thing and @user2?
我只想拥有 user1 , thing 和 user2 。
我可以用什么正则表达式来提取这三个名字?
PS:用户名必须只包含字母,数字和下划线。
答案 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+)/
以上内容涵盖以下场景,本主题中的其他答案不包括:
答案 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");