Expresión regular para coincidir con un punto


Respuestas:


161

A .en regex es un metacarácter, se usa para coincidir con cualquier carácter. Para hacer coincidir un punto literal, debe escapar de él, por lo que\.


44

En su expresión regular, debe escapar del punto "\."o usarlo dentro de una clase de carácter "[.]" , ya que es un metacarácter en expresiones regulares, que coincide con cualquier carácter.

Además, necesita en \w+lugar de \whacer coincidir una o más palabras.


Ahora, si quieres el test.thiscontenido, entonces splitno es lo que necesitas. splitdividirá su cuerda alrededor del test.this. Por ejemplo:

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

Puede utilizar 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 la clase de personaje. Usando gcovr de un Jenkinsfile y tratando de excluir directorios de puntos, Jenkins no entiende las secuencias de escape. La clase de personajes funcionó a la perfección.
Jonathan Landrum

13

"En el modo predeterminado, el punto (.) Coincide con cualquier carácter excepto un salto de línea. Si se ha especificado el indicador DOTALL, este coincide con cualquier carácter, incluido un salto de línea". (documento de Python)

Entonces, si desea evaluar el punto literalmente, creo que debería ponerlo entre corchetes:

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

0

para escapar de los caracteres no alfanuméricos de las variables de cadena, incluidos los puntos, puede usar re.escape:

import re

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

salida:

whatever\.v1\.dfc

puede usar la expresión de escape para encontrar / hacer coincidir la cadena literalmente.


-1

En javascript tienes que usar \. para que coincida con un punto.

Ejemplo

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

y

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

pide python, no JS
pl-jay

-2

Esta expresión,

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

también podría funcionar bien para esos tipos específicos de cadenas de entrada.

Manifestación

Prueba

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)

Salida

['test.this']

Si desea simplificar / modificar / explorar la expresión, se explica en el panel superior derecho de regex101.com . Si lo desea, también puede ver en este enlace cómo coincidiría con algunas entradas de muestra.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.