2016-07-02 16 views
1

besteht die Möglichkeit, ein Vorwärtsverweis mit einem Lookbehind in regex netVorwärtsreferenz mit einem Lookbehind C#?

Ich habe eine Zeichenfolge

pathwork 1 pathrelax 6 pathwork 2 pathrelax 7 pathwork 3

(?<=path(\w+)\s(\d)*.*?)path(\w+)(\s\d+) 

path$3$4$2 

I

erhalten möchten

pathwork 1 pathrelax 6 pathwork 21 pathrelax 76 pathwork 32

aber ich erhalte

pathwork 1 pathrelax 61 pathwork 26 pathrelax 72 pathwork 37

I

für diesen Befehl ändern wollen, aber nicht funktioniert

(?<=path(\2)\s(\d)*.*?)path(\w+)(\s\d+) 

    path$3$4$2 

i lesen Referenz über vorwärts http://www.regular-expressions.info/backref2.html#forward

+0

Die .NET-Syntax sieht ein bisschen anders im letzten Beispiel hier http://www.regular-expressions.info/refext.html – Slai

Antwort

0

Ihre zweite Regex funktioniert, Sie haben gerade die Gruppennummer falsch:

(?<=path(\3)\s(\d)*.*?)path(\w+)(\s\d+) 

Oder Sie könnten von dieser unnötigen Gruppe und skalieren loszuwerden, die Zahlen zurück: müssen

(?<=path\2\s(\d)*.*?)path(\w+)(\s\d+) // r/w "path$2$3$1" 

Natürlich müssen Sie nicht wirklich vorwärts Referenzen verwenden. Legen Sie einfach den Lookbehind später in der Regex:

(path\w+)(?<=\1 +(\d)*.*?\1) +(\d+) // r/w "$1$3$2" 

ich, es ist weniger verwirrend so sagen würde, aber ich denke, es ist nur anders verwirrend. Das Regexen zu zwingen, sich nach hinten zu beugen, wird nie schön sein.

+0

groß, sehr danke –