Se preguntaba lo que la mejor manera es hacer coincidir "test.this"
a "blah blah blah [email protected] 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 [email protected] blah blah"
decir? Usando Python.
He intentado re.split(r"\b\w.\w@")
\w
solo coincide con un solo carácter - probablemente quieras\w+
Respuestas:
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\.
fuente
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, entoncessplit
no es lo que necesitas.split
dividirá su cuerda alrededor deltest.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']
fuente
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'
fuente
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:
puede usar la expresión de escape para encontrar / hacer coincidir la cadena literalmente.
fuente
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]
fuente
Esta expresión,
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.
fuente