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

Vorrei aggiungere un prefisso prima di ogni cifra.eclipse - regex: sostituire più gruppo

ma l'utilizzo di (\w+\R)(\d+\R)+(\w+) e \1prefix\2\3 consente di aggiungere solo l'ultima cifra e cancellare le altre.

C'è un modo per farlo con una singola regex o dovrei scrivere uno script sul lato?

+0

'multiple' o' mutable'? – leppie

+0

Questa è in realtà una semplificazione della mia regex reale. Ma l'idea è che il testo attorno alle cifre mi aiuti a individuare l'area che devo modificare. Ho molti file di grandi dimensioni da modificare ed eseguire una sostituzione passo dopo passo con una regex più semplice richiederebbe un po 'di tempo – Garagos

risposta

5

Il problema con la vostra espressione regolare è l'uso di corrispondenza avidi nel (\d+\R)+, in particolare l'ultimo +. Che dice "abbina questo gruppo tutte le volte che puoi fintanto che non causa la mancanza di una partita". Quindi per il tuo testo divora 1, 2, 3 e 4 prima che non possa più inghiottire e mette l'ultima partita nel secondo gruppo di cattura. Ovviamente, è nella natura dei motori regex essere in grado di esprimere gruppi variadici, come li indirizzeresti comunque? Quindi la risposta breve, penso sia che le espressioni regolari sono lo strumento sbagliato per un processo completamente automatizzato e dovrai scrivere uno script.

Tuttavia, per un processo un po 'meno automatizzato che incorpora ancora il testo circostante, si potrebbe provare

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

Abbiamo avvolgere il secondo gruppo più è modificatore avido in un ulteriore set di parentesi catturare e racchiudere il corrispondente reale testo in un gruppo non catturante. Ora, abbiamo il set completo di cifre nel proprio gruppo e possiamo aggiungere il prefisso al primo. L'effetto collaterale interessante di questo è che il primo numero corrisponde al primo gruppo (\w+\R) e se si esegue nuovamente il comando Trova/Sostituisci, raggiunge il numero successivo nella riga finché non corrisponde più.

In questo modo, si dovrebbe essere in grado di scorrere i file almeno colpendo solo le aree a cui si è interessati ad aggiungere questo prefisso e non dovrebbe impiegare quasi il tempo di trovare ogni cifra in ogni file.