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

Je voudrais ajouter un préfixe avant chaque chiffre. Mais en utilisant (\w+\R)(\d+\R)+(\w+) et \1prefix\2\3 ne préfixera que le dernier chiffre et effacera les autres.eclipse - regex: remplacer plusieurs groupes

Existe-t-il un moyen de le faire avec une seule regex ou dois-je écrire un script sur le côté?

+0

'multiple' ou' mutable'? – leppie

+0

Ceci est en fait une simplification de mon regex réel. Mais l'idée est que le texte autour des chiffres m'aide à repérer la zone que je dois éditer. J'ai beaucoup de gros fichiers à éditer et exécuter une étape par étape remplacer par une regex plus simple prendrait du temps – Garagos

Répondre

5

Le problème avec votre regex est l'utilisation de concordance gourmande dans le (\d+\R)+, en particulier le dernier +. Cela se lit comme suit: «Associez ce groupe autant de fois que vous le pouvez, pourvu qu'il ne cause pas l'échec d'un match». Donc, pour votre texte, il engloutit 1, 2, 3 et 4 avant qu'il ne puisse plus engloutir et place la dernière partie dans le deuxième groupe de capture. De toute évidence, il est dans la nature des moteurs regex d'être incapables d'exprimer des groupes variadiques, comment les aborderiez-vous de toute façon? Donc, la réponse courte, je pense est que les expressions régulières sont le mauvais outil pour un processus entièrement automatisé et vous devrez écrire un script.

Cependant, pour un processus un peu moins automatisé qui intègre toujours votre texte qui l'entoure, vous pouvez essayer

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

Nous terminerons le deuxième groupe, plus il est modificateur gourmand dans un jeu supplémentaire de capture parens et joindre la mise en correspondance réelle texte dans un groupe non-capturant. Maintenant, nous avons l'ensemble complet des chiffres dans leur propre groupe et pouvons ajouter le préfixe au premier. L'effet secondaire intéressant de ceci est que le premier nombre correspond alors au premier groupe (\w+\R) et si vous lancez la recherche/remplacement à nouveau, il frappe le numéro suivant dans la ligne jusqu'à ce qu'il ne corresponde plus. De cette façon, vous devriez pouvoir parcourir vos fichiers au moins en touchant uniquement les zones que vous souhaitez ajouter à ce préfixe et cela ne devrait pas prendre autant de temps que de trouver chaque chiffre dans chaque fichier.