Expressão Regular para corresponder a um ponto

Estava a pensar qual seria a melhor maneira de igualar o teste.este " de " blah blah blah [email protected] blá blá é? Usando Python.

Eu tentei.re.split(r"\b\w.\w@")

Obrigado!

Author: Lev Levitsky, 2012-12-21

3 answers

A . na regex é um metacharacter, é usado para corresponder a qualquer carácter. Para combinar um ponto literal, você precisa escapar, então \.

 82
Author: Yuushi, 2012-12-21 11:51:20

No seu regex tem de escapar ao dot(.) - "\." ou usá-lo dentro de um character class - "[.]", uma vez que é um meta-carácter na regex, que corresponde a qualquer carácter.

Além disso, você precisa \w+ em vez de \w para corresponder uma ou mais palavras.


Agora, se você quer o conteúdo test.this, então split não é o que você precisa. split vai dividir a tua corda à volta do test.this. Para o exemplo: -
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']

Pode usar re.findall: -

>>> re.findall(r'\w+[.]\w+(?=@)', s)   # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s)     # capture group
['test.this']
 21
Author: Rohit Jain, 2014-01-04 15:15:00

" No modo predefinido, Dot (.) corresponde a qualquer personagem, exceto uma nova linha. Se a opção DOTALL tiver sido indicada, isto corresponde a qualquer carácter, incluindo uma nova linha."(python Doc)

Então, se você quiser avaliar o ponto literaly, eu acho que você deve colocá-lo entre parêntesis rectos:

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah [email protected] blah blah")
>>> resp.group()
'test.this'
 10
Author: StackUser, 2014-08-10 11:20:46