2010-10-18 8 views
5
someText 
1 
2 
3 
4 
moreText 

Me gustaría agregar un prefijo antes de cada dígito.eclipse - regex: reemplazar grupo múltiple

pero utilizando (\w+\R)(\d+\R)+(\w+) y \1prefix\2\3 solo marcarán el último dígito y borrarán los demás.

¿Hay alguna manera de hacerlo con una sola expresión regular o debo escribir un script en el lateral?

+0

'multiple' o' mutable'? – leppie

+0

Esto es en realidad una simplificación de mi expresión real real. Pero la idea es que el texto alrededor de los dígitos me ayude a detectar el área que tengo que editar. Tengo muchos archivos grandes para editar y ejecutar un reemplazo paso a paso con una expresión regular más simple tomaría un tiempo – Garagos

Respuesta

5

El problema con su expresión regular es el uso de concordancia ambiciosa en el (\d+\R)+, específicamente en el último +. Que dice, "unir a este grupo tantas veces como puedas siempre y cuando no cause la desaparición de un partido". Por lo tanto, para su texto engulle 1, 2, 3 y 4 antes de que no pueda engullir más y ponga el último partido en el segundo grupo de captura. Obviamente, está en la naturaleza de los motores de expresiones regulares el no poder expresar grupos variados, ¿cómo los abordaría de todos modos? Entonces, la respuesta corta, creo, es que las expresiones regulares son la herramienta incorrecta para un proceso totalmente automático y tendrás que escribir un script.

Sin embargo, para un proceso ligeramente menos automatizado que todavía incorpora el texto circundante, podría intentar

find: (\w+\R)((?:\d+\R)+)(\w+) 
replace: \1prefix\2\3 

Nos envolvemos el segundo grupo y además es modificador codiciosos en un juego extra de parens capturar y encerrar el juego real texto en un grupo que no captura Ahora, tenemos el conjunto completo de dígitos en su propio grupo y podemos agregar el prefijo al primero. El efecto secundario interesante de esto es que el primer número coincide entonces con el primer grupo (\w+\R) y si ejecuta el buscar/reemplazar nuevamente, golpea el siguiente número en la línea hasta que ya no coincida.

De esta forma, debería poder ejecutar sus archivos al menos solo al tocar las áreas que le interesan para agregar este prefijo y no debería tomar casi tanto tiempo como encontrar cada dígito en cada archivo.