Используемое мной регулярное выражение, которое было протестировано в нескольких контекстах:
/(^|[^@\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), за исключением символов подчеркивания, как отмечено выше. Убедитесь, что желаемое имя пользователя не содержит символов, тире или пробелов.