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\.

Yuushi
fuente
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']
Rohit Jain
fuente
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 [email protected] blah blah")
>>> resp.group()
'test.this'
StackUser
fuente
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.

Ali Abul Hawa
fuente
-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]
Zibri
fuente
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 [email protected] blah blah
blah blah blah test.this @gmail.com blah blah
blah blah blah [email protected] 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.


Emma
fuente