Не могли бы вы предоставить регулярное выражение, которое соответствует именам пользователей Twitter?
Дополнительный бонус, если представлен пример Python.
Не могли бы вы предоставить регулярное выражение, которое соответствует именам пользователей Twitter?
Дополнительный бонус, если представлен пример Python.
(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9]+)
Я использовал это, поскольку он игнорирует электронные письма
Вот пример твита
@Hello how are @you doing, email @000 me @ [email protected] @shahmirj
Выбор:
@Hello
@you
@shahmirj
Он также будет работать для хэш-тегов, я использую то же выражение с @
, измененным на #
У меня есть запись в блоге, в которой я постоянно обновляю свой @http://shahmirj.com/blog/extracting-twitter-usertags-using-regex, не забудьте сравнить это просто, я нашел ошибка: D
Правильно я просто пробрался туда: D
Если вы говорите о @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)
Я использую регулярное выражение и проверено в нескольких контекстах:
/(^|[^@\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 [email protected], 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 [email protected], and this is a @probablyfaketwitterusername
На основе Специфика Twitter:
Ваше имя пользователя не может быть длиннее 15 символов. Ваше настоящее имя может быть длиннее (20 символов), но имена пользователей сохраняются короче для удобства. Имя пользователя может содержать только буквенно-цифровые символы (буквы A-Z, цифры 0-9), за исключением подчеркивания, как указано выше. Убедитесь, что ваше желаемое имя пользователя не содержит символов, тире или пробелов.
Twitter недавно выпущен в с открытым исходным кодом в различные языки, включая Java, Ruby (gem) и реализации Javascript кода, который они используют для поиска имен пользователей, хэш-тегов, списков и URL-адресов.
Это очень регулярное выражение, ориентированное.
Единственными символами, принятыми в форме, являются A-Z, 0-9 и подчеркивание. Имена пользователей не чувствительны к регистру, поэтому вы можете использовать r'@(?i)[a-z0-9_]+'
, чтобы все правильно совместить, а также различать пользователей.
Короче, /@([\w]+)/
работает нормально.
Это метод, который я использовал в проекте, который принимает текстовый атрибут объекта tweet и возвращает текст как с hashtags, так и с user_mentions, связанными с соответствующими страницами в twitter, в соответствии с последними рекомендациями по отображению твиттера.
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'\[email protected]<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. Надеюсь, что это будет полезно.
Это регулярное выражение, похоже, разрешает имена пользователей Twitter:
^@[A-Za-z0-9_]{1,15}$
Максимум 15 символов, позволяет подчеркивать непосредственно после @(что делает Twitter) и позволяет все подчеркивания (которые после быстрого поиска я обнаружил, что Twitter, очевидно, также делает). Исключает адреса электронной почты.