Как извлечь имена пользователей из твитов? - PullRequest
8 голосов
/ 11 апреля 2009

У меня есть следующий пример твита:

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

Я хочу иметь только user1 , вещь и user2 .

Какое регулярное выражение я могу использовать для извлечения этих трех имен?

PS: имя пользователя должно содержать только буквы, цифры и подчеркивания.

Ответы [ 5 ]

17 голосов
/ 11 апреля 2009

Протестировано:

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

в рубинах (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
)
2 голосов
/ 25 июля 2012
/(?<!\w)@(\w+)/

Выше описан следующий сценарий, который другие ответы в этой теме не делают:

  • Знак @, который не должен быть именем пользователя, например, «мой адрес электронной почты test@example.com»
  • Тем не менее разрешает имя пользователя, которое находится в начале строки, например, "@username lorem ipsum ..."
1 голос
/ 12 апреля 2009

попробуйте итератор (findall) с этим регулярным выражением:

(@[\w-]+)

прощай

0 голосов
/ 23 апреля 2014

Хорошая идея - включить текстовую библиотеку Twitter [1] в ваш проект для решения этой проблемы.

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

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

0 голосов
/ 11 апреля 2009

Это должно сделать это (я использовал именованные захваты для удобства):

.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...