Expressões regulares IV

A expressão regular mais trabalhosa, até agora, foi a seguinte, que serve para capturar menções, ou seja, nomes precedidos por @, mas que não são emails.

O mais difícil foi perceber que a expressão (?<=\@)\w+ não devolve o @ para o negative lookbehind anterior, e por isso é que tive que usar o @ também no negative lookbehind (?<!\w\@).

Eis o código:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import re
import collections

line = "@mary call @john or send him an email @ john2@gmail.com also tell @mary that I cannot go. Regards @estêvão"

p = re.compile(ur'(?i)(?<!\w\@)((?<=\@)\w+)',re.U)
r = p.findall(line)
cnt = collections.Counter(r)

print cnt

for key, value in cnt.iteritems():
    print key, value

e o resultado, com contagem de ocorrências:

Counter({u'mary': 2, u'est\xeav\xe3o': 1, u'john': 1})
estêvão 1
john 1
mary 2
gmail 1

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *