python - solo - regex termina con
regex para nombre de usuario de Twitter (8)
¿Podría proporcionar una expresión regular que coincida con los nombres de usuario de Twitter?
Bonificación extra si se proporciona un ejemplo de Python.
Esta expresión regular parece resolver los nombres de usuario de Twitter:
^@[A-Za-z0-9_]{1,15}$
Máx. 15 caracteres, permite caracteres de subrayado directamente después de @, (lo cual hace Twitter), y permite todos los guiones bajos (que, después de una búsqueda rápida, descubrí que Twitter aparentemente también lo hace). Excluye direcciones de correo electrónico
Este es un método que he usado en un proyecto que toma el atributo de texto de un objeto de tweet y devuelve el texto con los hashtags y user_mentions vinculados a sus páginas apropiadas en twitter, cumpliendo con las pautas de visualización de Twitter más recientes.
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))
Una vez que llame a este método, puede pasar el param my_tweet [x] .text. Espero que esto sea útil.
La expresión regular que uso, y que se han probado en contextos múltiples:
/(^|[^@/w])@(/w{1,15})/b/
Esta es la forma más limpia que he encontrado para probar y reemplazar el nombre de usuario de Twitter en cadenas.
#!/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;
Esto me devolverá como esperaba:
<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
Basado en las especificaciones de Twitter :
Su nombre de usuario no puede tener más de 15 caracteres. Su nombre real puede ser más largo (20 caracteres), pero los nombres de usuario se mantienen más cortos por el simple hecho de hacerlo. Un nombre de usuario solo puede contener caracteres alfanuméricos (letras AZ, números 0-9) con la excepción de los guiones bajos, como se indicó anteriormente. Verifique para asegurarse de que su nombre de usuario deseado no contenga ningún símbolo, guiones o espacios.
Los únicos caracteres aceptados en el formulario son AZ, 0-9 y guión bajo. Sin embargo, los r''@(?i)[a-z0-9_]+''
usuario no distinguen entre mayúsculas y minúsculas , por lo que podría usar r''@(?i)[a-z0-9_]+''
para hacer coincidir todo correctamente y también para discernir entre los usuarios.
Más corto, /@([/w]+)/
funciona bien.
Si estás hablando de lo que @username
usan en twitter, puedes usar esto:
import re
twitter_username_re = re.compile(r''@([A-Za-z0-9_]+)'')
Para hacer que cada instancia sea un enlace HTML, podrías hacer algo como esto:
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)
Twitter lanzó recientemente a código abierto en varios idiomas, incluyendo Java, Ruby ( gem ) y las implementaciones de JavaScript del código que utilizan para encontrar nombres de usuario, etiquetas hash, listas y direcciones URL.
Es muy regular orientado a la expresión.
(?<=^|(?<=[^a-zA-Z0-9-_/.]))@([A-Za-z]+[A-Za-z0-9-_]+)
Lo he usado porque ignora los correos electrónicos.
Aquí hay un tweet de muestra:
@ Hola, ¿cómo estás @you haciendo @my_friend, correo electrónico @ 000 me @ [email protected] @shahmirj
Partidos:
- @Hola
- @tú
- @mi amigo
- @shahmirj
También funcionará para hashtags, utilizo la misma expresión con @
cambiado a #
.