Se preguntaba lo que la mejor manera es hacer coincidir "test.this"
a "blah blah blah test.this@gmail.com blah blah"
decir? Usando Python.
He intentado re.split(r"\b\w.\w@")
Se preguntaba lo que la mejor manera es hacer coincidir "test.this"
a "blah blah blah test.this@gmail.com blah blah"
decir? Usando Python.
He intentado re.split(r"\b\w.\w@")
Respuestas:
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 \w
hacer coincidir una o más palabras.
Ahora, si quieres el test.this
contenido, entonces split
no es lo que necesitas. split
dividirá 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']
"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'
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.
Esta expresión,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
también podría funcionar bien para esos tipos específicos de cadenas de entrada.
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)
['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.
\w
solo coincide con un solo carácter - probablemente quieras\w+