
Estoy creando una expresión regular para filtrar cualquier subcadena que comience con '#' o '@'. Estoy intentando filtrar los tweets de esos. Actualmente coincide con todo, sin importar si la cadena contiene palabras que comienzan con '#' o '@'.
((?!\#)|(?!\@)).*
En esta cadena a continuación quiero hacer coincidir todo lo que está en negrita, pero nada más:
Hola shahrukh. ¿Quién es tu co-actor en la próxima película?@iamsrk #lovefrommalaysia #askSRK
Quiero mantener los espacios en blanco entre las palabras en negrita. ¿Cómo puedo conseguir esto? Esto se usará en Python para su información.
Respuesta1
No importa hacer coincidir todo excepto las subcadenas que comienzan con '@' o '#'. Simplemente hice lo contrario y usé re.sub en Python para eliminarlos de la cadena:
>>> import re
>>> text = 'Hi shah rukh. Who is your co-actor in the upcoming movie? @iamsrk #lovefrommalaysia #askSRK'
>>> text = re.sub(r'([\#\@].*?)(?=([\r\n ]|$))', '', text).strip()
>>> print text
Hi shah rukh. Who is your co-actor in the upcoming movie?
Breve explicacion:
- El grupo coincidente #1
([\#\@].*?)
agrupa # o @ junto con unos pocos caracteres a continuación (no codiciosos). - La búsqueda anticipada positiva
(?=([\r\n ]|$))
intenta hacer coincidir un retorno de carro, una nueva línea, un espacio o el final de una cadena sin incluirlo en el resultado.
No sé qué tan elegante es esta solución, pero funciona para mi uso. Intentaloregexr.com