带有后视C#的前向参考?

时间:2016-07-02 23:52:37

标签: c# regex replace

可以在regex net中使用带有lookbehind的前向引用

我有一个字符串

pathwork 1 pathrelax 6 pathwork 2 pathrelax 7 pathwork 3

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

path$3$4$2

我想获得

pathwork 1 pathrelax 6 pathwork 21 pathrelax 76 pathwork 32

但我获得了

pathwork 1 pathrelax 61 pathwork 26 pathrelax 72 pathwork 37

我想要改变

用于此命令但不起作用

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

    path$3$4$2

我读到有关前向参考http://www.regular-expressions.info/backref2.html#forward

的信息

1 个答案:

答案 0 :(得分:0)

你的第二个正则表达式有效,你的组号错误了:

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

或者你可以摆脱那个不必要的群体并缩小数字:

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

当然,您实际上不必使用前向引用。只需稍后将其置于正则表达式中即可:

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

我打算说这种方式不那么令人困惑,但我想这只会让人感到困惑。迫使正则表达式向后弯曲是不可能的。