Ersetze ein reguläres Ausdruck-Subset mit einer Funktion

8

Sagen wir, ich habe Zeichenfolgen wie

%Vor%

und ich möchte die Teile zwischen Anführungszeichen in b:foo="hop" oder b:bar="hu?" mit einer Funktion ersetzen.

Es ist einfach, einen regulären Ausdruck zu erstellen, um die Übereinstimmung und das Submatch zu erhalten, zum Beispiel

%Vor%

und dann ReplaceAllStringFunc aufzurufen, aber das Problem ist, dass der Callback das ganze Match und nicht das Submatch empfängt:

%Vor%

Wie kann ich das Submatch ersetzen?

Im Moment habe ich keine bessere Lösung gefunden, als mich m innerhalb des Callbacks mit einem Regex zu zerlegen und den String nach der Verarbeitung des Submatch neu aufzubauen.

Ich hätte einen alternativen Ansatz mit einem positiven Blick hinterher verwendet, wenn sie in Go verfügbar wären, aber das ist nicht der Fall (und sie sollten sowieso nicht notwendig sein).

Was kann ich hier tun?

EDIT: Hier ist meine aktuelle Lösung, die ich vereinfachen möchte:

%Vor%

(Spielplatz Link)

Was mich stört ist, dass ich die Regex zweimal anwenden muss. Das klingt nicht richtig.

    
Denys Séguret 12.06.2013, 12:25
quelle

1 Antwort

1

Ich mag den Code nicht, aber er scheint zu tun, was Sie zu tun scheinen:

%Vor%

Spielplatz

Ausgabe

%Vor%

EDIT: Nimm II.

%Vor%

Spielplatz

Ausgabe:

%Vor%     
zzzz 12.06.2013 12:49
quelle

Tags und Links