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

對於上面的代碼,我希望可以將輸出爲Regex.Replace與佔位符

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

,但它給了我

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

什麼問題

+4

使用$ 1和$ 2個反向引用,刪除括號。 –

+0

並在第一次反向引用前刪除斜槓。 –

+0

刪除反斜槓似乎不是必要的。但是最後的否定字符類可以替換爲'。*' –

回答

1

原因反向引用不起作用的是您用括號括起了ID。你可以用括號括起來以消除任何含糊之處,但是因爲你只有2個,所以你不需要它們。

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

IDEONE demo

既然你替換所有\/,你也可以使用.*代替[^\\]*(你沒有任何\任何更長的時間,因此你只匹配字符串的所有的剩餘):

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

Another demo