Regex.Replace with placeholder

时间:2016-01-31 11:43:01

标签: c# regex

string output = @"D:\C_Drive\Desktop\z3-str\Z3-str.py";
            output = output.Replace(@"\", "/");
            output = Regex.Replace(output, @"(\w):/([^\\]*)", "/cygdrive/$(1)/$(2)");

对于上面的代码,我希望输出为

/cygdrive/D/C_Drive/Desktop/z3-str/Z3-str.py

但它给了我

/cygdrive/$(1)/$(2)

问题是什么

1 个答案:

答案 0 :(得分:1)

反向引用不起作用的原因是您用括号括起了ID。您可以用大括号将它们括起来以消除任何歧义,但由于您只有2,因此您不需要它们。

只需使用$1$2/cygdrive/$1/$2

请参阅IDEONE demo

由于您将所有\替换为/,因此您也可以使用.*代替[^\\]*(您再也没有\,因此你只需匹配字符串的其余部分):

output = Regex.Replace(output.Replace("\\", "/"), @"(\w):/(.*)", "/cygdrive/$1/$2");

Another demo