可以在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
的信息答案 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"
我打算说这种方式不那么令人困惑,但我想这只会让人感到困惑。迫使正则表达式向后弯曲是不可能的。