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:
- O grupo de correspondência # 1
([\#\@].*?)
agrupa # ou @ junto com o menor número de caracteres após (não-ganancioso). - 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