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!
50
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