如何在以下正则表达式中转义反斜杠c#

时间:2013-07-31 15:17:05

标签: c# regex escaping

这是我的函数,我正在尝试替换文件中的字符串,但c#告诉我我的正则表达式格式错误。有什么想法吗?

public void function(string fileName, string path) {
    string pathToAmmend = @"$SERVERROOT\pathpath";
    string newPath = @"$SERVERROOT\" + path;

    File.WriteAllText(fileName, Regex.Replace(File.ReadAllText(fileName), pathToAmmend, newPath));            
    ....
}

如果我将字符串更改为:

,则有效
string pathToAmmend = @"$SERVERROOT\\pathpath";
string newPath = @"$SERVERROOT\\" + path;

但后来我有两个斜线,我只想要一个斜线。

2 个答案:

答案 0 :(得分:7)

听起来你实际上根本不需要正则表达式。听起来你可能只想要string.Replace

// Split into three statements for clarity.
string input = File.ReadAllText(fileName);
string output = input.Replace(pathToAmend, newPath);
File.WriteAllText(output);

当您真正尝试匹配模式时,才使用正则表达式。

答案 1 :(得分:3)

\是正则表达式中特殊的转义字符。您必须将其转义,以便将其解释为文字\而不是转义序列。 $也是一个特殊字符(end anchor),所以你也想要逃避它。

string pathToAmmend = @"\$SERVERROOT\\pathpath";

使用@创建逐字字符串只意味着您不必为了C#编译器而逃避\。您仍然以正则表达式模式转义\ for。没有逐字字符串,这将是:

string pathToAmmend = "\\$SERVERROOT\\\\pathpath";

当然,作为Jon Skeet points out,对于这些简单的正则表达式来说,这不是最好的方式。