2009-05-07 9 views
1

Je suis en train de faire remplacer de toutes les instances de chaînes commeComment effectuer un remplacement d'expressions régulières avec des groupes numérotés?

PageLocalize("Texts", "R73") 

avec quelque chose comme

Texts.R73.Localise() 

J'ai un regex pour ces chaînes:

PageLocalize\("([A-Za-z]+)", "([A-Za-z0-9]{0,6})"\) 

Et une chaîne de remplacement:

$1.$2.Localise() 

mais The Regex Coach dit mon résultat de remplacement est

$1.$2.Localise() 

Que dois-je faire pour mon regex pour obtenir les groupes numérotés de travailler?

+0

Quelle est cette langue? – Mez

Répondre

2

Je ne l'ai pas utilisé RegexCoach, mais certains moteurs Regex vous avez besoin de spécifier un backreference avec une barre oblique inverse, comme ceci:

\1.\2.Localise() 

Le résultat que vous êtes gett ING est possible que si 1 $ n'est pas reconnu comme backreference au groupe 1.

Edit:

Je viens de vérifier et RegexCoach semble utiliser la syntaxe Perl Regex. Si tel est le cas, alors $1 serait une référence arrière valable pour le groupe 1. Ensuite, il semblerait que le moteur ne puisse pas faire correspondre les groupes.

+0

Vous voulez dire \ $ 1 j'ai raison? – Andomar

+0

Non, je voulais dire \ 1. ;-) – AmitK

+0

Je me demandais juste, si c'est une référence arrière valide, comment ça se termine dans la chaîne de résultats? Je m'attends à ce qu'il soit remplacé par une chaîne vide au moins. – Andomar

2

Il fonctionne très bien dans une application de test:

var r = new Regex(
    "PageLocalize\\(\"([A-Za-z]+)\", \"([A-Za-z0-9]{0,6})\"\\)"); 
var s = r.Replace("PageLocalize(\"Texts\", \"R73\")", "$1.$2.Localise()"); 
Console.WriteLine(s); 

Il en résulte:

Texts.R73.Localise() 

AmitK trouvé la bonne façon de faire dans Regex Coach, qui utilise \ 1 au lieu de 1 $. Il s'avère que RegexCoach n'est pas une application .NET, donc il n'utilise pas les expressions régulières .NET!

Sur une note séparée, connaissez-vous named groups? Ils sont plus faciles à maintenir, surtout si vous ajoutez de nouveaux groupes à l'expression régulière. Impossible d'obtenir Stackoverflow pour afficher un regex de groupe nommé sans espaces, si elle est ici avec des espaces entre:

Et dans le texte de remplacement (< group_name> yourregex?):

${group_name} 
Questions connexes