regex para combinar tudo, mas substrings começando com hashkey

0

Estou criando uma regex para filtrar qualquer substring começando com '#' ou '@'. Eu estou tentando filtrar os tweets daqueles. Atualmente, ele combina com tudo, não importa se a string contém palavras que começam com '#' ou '@'.

((?!\#)|(?!\@)).*

Nesta sequência abaixo, quero corresponder tudo em negrito, mas não mais:

Oi shah rukh. Quem é seu co-ator no próximo filme? @iamsrk #lovefrommalaysia #askSRK

Eu quero manter os espaços em branco entre as palavras em negrito. Como posso conseguir isso? Isso será usado em Python FYI.

    
por Linus 06.08.2015 / 13:38

1 resposta

0

Anote tudo, exceto substrings começando com '@' ou '#'. Eu apenas fiz o oposto e usei re.sub em python para remover os 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:

  1. O grupo de correspondência # 1 ([\#\@].*?) agrupa # ou @ junto com o menor número de caracteres após (não-ganancioso).
  2. Lookahead positivo (?=([\r\n ]|$)) tenta corresponder a um retorno de carro, nova linha, espaço ou fim de string sem incluí-lo no resultado.

Eu não sei o quão elegante é essa solução, mas funciona para o meu uso. Experimente em regexr.com

    
por 06.08.2015 / 15:48