¿Cómo capturar un par de líneas alrededor de una coincidencia de expresiones regulares?


8

Estoy buscando una expresión regular para que coincida con un par de líneas sobre la línea coincidente. Por ejemplo:

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

Me gustaría capturar las 2 líneas sobre XXXXXXXX.

Cualquier ayuda sería apreciada. Nota: con Python usando la biblioteca re


1
¿Con qué software? Los diferentes programas tienen diferentes ideas sobre lo que es una expresión regular.
David Richerby

¿Usa Python específicamente o en cualquier herramienta / lenguaje?
kenorb

Si está utilizando python, podría ser mejor volcar todo en una matriz, donde cada fila es su propio elemento. Luego recorre la matriz, encontrando XXXXXXXX, una vez encontrado use el índice de ese elemento -1 y -2 para obtener las líneas.
LPChip

hola hombre, gracias por el consejo, ya lo hice con un bucle for pero me preguntaba cómo hacer con regex
takobaba

Respuestas:


15

El siguiente RegEx prueba una cantidad variable de líneas antes de la XXXXXXXXlínea y las devuelve en el primer grupo de captura.

((.*\n){2})XXXXXXXX

  1. (.*\n)prueba una cadena que termina con \n, una nueva línea.
  2. {2} cuantifica esto 2 veces.
  3. () eso asegura que todas las líneas vengan en un solo grupo de captura.
  4. XXXXXXXX es la cadena con la que el texto tiene que terminar.

Ahora en Python, puede usar p.match(regex)[0]para devolver el primer grupo de captura.


44
Tenga cuidado, esto puede causar problemas en Windows. Si es así, intente en \r\nlugar de solo \n.
Qix - MONICA FUE MALTRATADA el

1
Por supuesto, esto solo coincidirá con una línea que comienza con XXXXXXXX(pero no necesariamente termina con XXXXXXXX).
G-Man dice 'Restablece a Monica' el

0

Agregando a la respuesta de erikgaal, use un extra. * Antes de xxxxxx, para que coincida con las pestañas / espacios en blanco.

((. * \ n) {2}). * xxxxxxx


1
Bueno, .*no coincidirá solo con pestañas / espacios; coincidirá con cualquier cosa (p. ej., "The quick brown XXXXXXX").
G-Man dice 'Restablece a Monica' el
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.