Expressão regular para corresponder a um ponto


Respostas:


150

Um .em regex é um metacaractere, é usado para corresponder a qualquer caractere. Para corresponder a um ponto literal, você precisa escapar dele, então\.


43

Em sua regex, você precisa escapar do ponto "\."ou usá-lo dentro de uma classe de caractere "[.]" , pois é um metacaractere na regex, que corresponde a qualquer caractere.

Além disso, você precisa em \w+vez de \wcorresponder a um ou mais caracteres do word.


Agora, se você quer o test.thisconteúdo, então splitnão é o que você precisa. splitirá dividir sua corda em torno do test.this. Por exemplo:

>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']

Você pode usar re.findall:

>>> re.findall(r'\w+[.]\w+(?=@)', s)   # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s)     # capture group
['test.this']

2
1 para classe de personagem. Usando gcovr de um Jenkinsfile e tentando excluir diretórios de ponto, o Jenkins não entende sequências de escape. A classe de personagens funcionou lindamente.
Jonathan Landrum

12

"No modo padrão, Ponto (.) Corresponde a qualquer caractere, exceto uma nova linha. Se o sinalizador DOTALL foi especificado, ele corresponde a qualquer caractere incluindo uma nova linha." (python Doc)

Então, se você quiser avaliar o ponto literalmente, acho que você deve colocá-lo entre colchetes:

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'

0

Em javascript você deve usar \. para combinar com um ponto.

Exemplo

"blah.tests.zibri.org".match('test\\..*')
null

e

"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]

pede python, não JS
pl-Jay,

0

para escapar caracteres não alfanuméricos de variáveis ​​de string, incluindo pontos, você pode usar re.escape:

import re

expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)

resultado:

whatever\.v1\.dfc

você pode usar a expressão de escape para localizar / combinar a string literalmente.


-1

Esta expressão,

(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)

também pode funcionar bem para esses tipos específicos de strings de entrada.

Demo

Teste

import re

expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)'
string = '''
blah blah blah test.this@gmail.com blah blah
blah blah blah test.this @gmail.com blah blah
blah blah blah test.this.this@gmail.com blah blah
'''

matches = re.findall(expression, string)

print(matches)

Resultado

['test.this']

Se você deseja simplificar / modificar / explorar a expressão, isso foi explicado no painel superior direito de regex101.com . Se desejar, você também pode assistir neste link , como ele corresponderia a algumas entradas de amostra.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.