2010-03-02 21 views
5

Si tengo un montón de texto como esteExpresión regular para reemplazar múltiples líneas que coinciden con un patrón

The cat sat on the mat 
Expropriations for international monetary exchange (Currenncy: Dollars, 
                Value: 50,000) 
The cat sat on the mat 
Expropriations for international monetary exchange (Currenncy: Yen) 
The cat sat on the mat 

¿Hay una expresión regular que podría utilizar en el Buscar/característica de mi editor de texto Reemplazar (Jedit) identificar todas las líneas que comienzan con la palabra Expropriations y extremo con un paréntesis de cierre y luego poner esas líneas entre corchetes para que el siguiente aspecto:

The cat sat on the mat 
[Expropriations for international monetary exchange (Currenncy: Dollars, 
                Value: 50,000)] 
The cat sat on the mat 
[Expropriations for international monetary exchange (Currenncy: Yen)] 
The cat sat on the mat 

Lo complicado es que el paréntesis de cierre podría caer al final de la misma línea que la palabra 'Expropriations' o al final de la siguiente línea. (Puede haber incluso más de una línea antes de que se cierren los paréntesis)

Respuesta

2

Se puede sincronizar:

^(Expropriations[\d\D]*?\)) 

y sustituirla por:

[$1] 

\d\D coincide con cualquier carbón sola incluyendo el salto de línea.

0

Si puede especificar las opciones de expresión regular, intente activar "línea única". De esta manera, a Regex no le importan los saltos de línea.

0

¿Jedit admite la búsqueda y el reemplazo con expresiones regulares multilínea?

Aquí se muestra cómo lograr esto usando una secuencia de comandos python.

El punto principal es establecer los indicadores DOTALL ('s') y MULTILINE ('m') de la expresión regular.

import re 
str = """The cat sat on the mat 
Expropriations for international monetary exchange (Currenncy: Dollars, 
                Value: 50,000) 
The cat sat on the mat 
Expropriations for international monetary exchange (Currenncy: Yen) 
The cat sat on the mat""" 

regex = re.compile(r'^(Expropriations.*?\))', re.S|re.M) 
replaced = re.sub(regex, '[\\1]', str) 
print replaced 

El gato se sentó en la estera
[Expropiaciones para el intercambio monetario internacional (Currenncy: Dólares,
Valor: 50.000)]
El gato se sentó en la estera
[Expropiaciones para monetario internacional cambio (Currencia: Yen)]
El gato se sentó en la estera

Cuestiones relacionadas