регулярное выражение для имени пользователя Twitter - PullRequest
42 голосов
/ 21 февраля 2010

Не могли бы вы предоставить регулярное выражение, соответствующее именам пользователей в Твиттере?

Дополнительный бонус, если предоставляется пример Python.

Ответы [ 8 ]

71 голосов
/ 15 июня 2011
(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9-_]+)

Я использовал это, поскольку оно игнорирует электронные письма.

Вот пример твита:

@ Здравствуйте, как поживаете, @my_friend, пишите @ 000 me @ whats.up@example.com @ shahmirj

Соответствует:

  • @ * Hello 1013 *
  • @ вы
  • @ my_friend
  • @ shahmirj

Это также будет работать для хэштегов, я использую то же выражение с @, измененным на #.

19 голосов
/ 21 февраля 2010

Если вы говорите о том, @username что они используют в твиттере, то вы можете использовать это:

import re
twitter_username_re = re.compile(r'@([A-Za-z0-9_]+)')

Чтобы сделать каждый экземпляр HTML-ссылкой, вы можете сделать что-то вроде этого:

my_html_str = twitter_username_re.sub(lambda m: '<a href="http://twitter.com/%s">%s</a>' % (m.group(1), m.group(0)), my_tweet)
18 голосов
/ 15 ноября 2012

Используемое мной регулярное выражение, которое было протестировано в нескольких контекстах:

/(^|[^@\w])@(\w{1,15})\b/

Это самый чистый способ проверки и замены имени пользователя Twitter в строках.

#!/usr/bin/python

import re

text = "@RayFranco is answering to @jjconti, this is a real '@username83' but this is an@email.com, and this is a @probablyfaketwitterusername";

ftext = re.sub( r'(^|[^@\w])@(\w{1,15})\b', '\\1<a href="http://twitter.com/\\2">\\2</a>', text )

print ftext;

Это вернет меня, как ожидалось:

<a href="http://twitter.com/RayFranco">RayFranco</a> is answering to <a href="http://twitter.com/jjconti">jjconti</a>, this is a real '<a href="http://twitter.com/username83">username83</a>' but this is an@email.com, and this is a @probablyfaketwitterusername

Основано на характеристиках Twitter :

Ваше имя пользователя не может быть длиннее 15 символов. Ваше настоящее имя может быть длиннее (20 символов), но имена пользователей для удобства сохраняются короче. Имя пользователя может содержать только буквенно-цифровые символы (буквы A-Z, цифры 0-9), за исключением символов подчеркивания, как отмечено выше. Убедитесь, что желаемое имя пользователя не содержит символов, тире или пробелов.

11 голосов
/ 25 февраля 2010

Twitter недавно выпущенный до с открытым исходным кодом на различных языках, включая реализации Java, Ruby ( gem ) и Javascript кода, который они используют для поиска имен пользователей, хэш-теги, списки и URL-адреса.

Очень ориентированный на регулярные выражения.

2 голосов
/ 21 февраля 2010

В форме допускаются только символы A-Z, 0-9 и подчеркивание. Имена пользователей не чувствительны к регистру , поэтому вы можете использовать r'@(?i)[a-z0-9_]+' для правильного сопоставления и различения пользователей.

1 голос
/ 14 марта 2014

Это регулярное выражение, кажется, решает имена пользователей Twitter:

^@[A-Za-z0-9_]{1,15}$

Макс. 15 символов, позволяет подчеркивать сразу после @ (что делает Твиттер) и разрешает все подчеркивания (что после быстрого поиска я обнаружил, что, видимо, и Твиттер тоже) Исключая адреса электронной почты.

1 голос
/ 21 февраля 2013

Это метод, который я использовал в проекте, который берет атрибут text объекта твита и возвращает текст с хэштегами и user_mentions, связанными с соответствующими страницами в твиттере, в соответствии с самыми последними рекомендациями по отображению в твиттере

def link_tweet(tweet):
"""
This method takes the text attribute from a tweet object and returns it with
user_mentions and hashtags linked
"""
tweet = re.sub(r'(\A|\s)@(\w+)', r'\1@<a href="http://www.twitter.com/\2">\2</a>', str(tweet))
return re.sub(r'(\A|\s)#(\w+)', r'\1#<a href="http://search.twitter.com/search?q=%23\2">\2</a>', str(tweet))

Как только вы вызовете этот метод, вы можете передать в параметре my_tweet [x] .text. Надеюсь, что это полезно.

1 голос
/ 25 февраля 2010

короче, /@([\w]+)/ отлично работает.

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