
Estou construindo um regex para filtrar quaisquer substrings que comecem com '#' ou '@'. Estou tentando filtrar tweets deles. Atualmente ele corresponde a tudo, não importa se a string contém palavras que começam com '#' ou '@'.
((?!\#)|(?!\@)).*
Nesta string abaixo quero combinar tudo em negrito, mas nada mais:
Olá, Xá Rukh. Quem é o seu co-ator no próximo filme?@iamsrk #lovefrommalaysia #askSRK
Quero manter os espaços em branco entre as palavras em negrito. Como posso conseguir isso? Isso será usado em python para sua informação.
Responder1
Não se preocupe em combinar tudo, exceto substrings começando com '@' ou '#'. Acabei de fazer o oposto e usei re.sub em python para removê-los da string:
>>> 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 explicação:
- O grupo correspondente nº 1
([\#\@].*?)
agrupa # ou @ junto com o menor número de caracteres a seguir (não ganancioso). - A antecipação positiva
(?=([\r\n ]|$))
tenta corresponder a um retorno de carro, nova linha, espaço ou final de string sem incluí-lo no resultado.
Não sei o quão elegante é essa solução, mas funciona para meu uso. Experimenteregexr. com