Buscar..


¿Por qué el punto (.) No coincide con el carácter de nueva línea ("\ n")?

.* en regex básicamente significa "capturar todo hasta el final de la entrada".

Entonces, para cadenas simples, como hello world .* Funciona perfectamente. Pero si tiene una cadena que representa, por ejemplo, líneas en un archivo, estas líneas estarán separadas por un separador de línea , como \n (nueva línea) en sistemas similares a Unix y \r\n (retorno de carro y nueva línea) en Windows

Por defecto en la mayoría de los motores de expresiones regulares, . no coincide con los caracteres de nueva línea, por lo que la coincidencia se detiene al final de cada línea lógica . Si quieres . para hacer coincidir realmente todo, incluidas las nuevas líneas, debe habilitar el modo "punto-coincidencias-todo" en el motor de re.DOTALL regulares de su elección (por ejemplo, agregue re.DOTALL flag en Python, o /s en PCRE).

¿Por qué una expresión regular omite algunos paréntesis / paréntesis de cierre y los combina después?

Considera este ejemplo:

Entró en el café "Dostoevski" y dijo: "Buenas noches".

Aquí tenemos dos conjuntos de citas. Asumamos que queremos hacer coincidir ambas, de modo que nuestra expresión regular coincida con "Dostoevski" y "Good evening."

Al principio, podrías estar tentado a hacerlo simple:

".*"  # matches a quote, then any characters until the next quote

Pero no funciona: coincide con la primera cita en "Dostoevski" y hasta la cita de cierre en "Good evening." , incluyendo el and said: parte. Demo regex101

¿Por qué sucedió?

Esto sucede porque el motor de expresiones regulares, cuando se encuentra .* , "Consume" toda la entrada hasta el final. Luego, debe coincidir con la final " . Por lo tanto," retrocede "desde el final de la coincidencia, soltando el texto coincidente hasta que se encuentre el primer " y, por supuesto, es el último " en la coincidencia , al final de la parte "Good evening." .

¿Cómo evitar esto y coincidir exactamente con las primeras citas?

Use [^"]* . No come toda la entrada, solo hasta la primera " , según sea necesario. Demo regex101



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow