【问题标题】:forward reference with a lookbehind C#?带有后向 C# 的前向引用?
【发布时间】:2016-07-02 23:52:37
【问题描述】:

是否可以在正则表达式网络中使用前向引用和后向引用

我有一个字符串

路径 1 路径松弛 6 路径 2 路径松弛 7 路径 3

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

path$3$4$2

我要获得

路径 1 路径松弛 6 路径 21 路径松弛 76 路径 32

但我得到了

路径 1 路径松弛 61 路径 26 路径松弛 72 路径 37

我想要改变

对于这个命令但不起作用

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

    path$3$4$2

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

【问题讨论】:

标签: c# regex replace


【解决方案1】:

您的第二个正则表达式有效,只是组号错误:

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

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

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

当然,您实际上不必使用前向引用。只需稍后在正则表达式中放置lookbehind:

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

我本来想说这种方式不那么令人困惑,但我想这只是不同的混乱。强迫正则表达式向后弯曲永远不会很漂亮。

【讨论】:

    猜你喜欢
    • 2015-11-02
    • 1970-01-01
    • 2010-10-16
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多