C# 如何在下面的正则表达式c中避开反斜杠

C# 如何在下面的正则表达式c中避开反斜杠,c#,regex,escaping,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.Read

这是我的函数,我试图替换文件中的字符串,但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;

但是我有两个斜杠,我只想要一个斜杠。

听起来你根本不需要正则表达式。听起来你很可能只是想:

只有在真正尝试匹配模式时才使用正则表达式。

A\是正则表达式中的一个特殊转义字符。您必须对其进行转义,以便将其解释为文字\而不是转义序列。$也是一个特殊的角色,所以你也要避开它

string pathToAmmend = @"\$SERVERROOT\\pathpath";
使用@创建逐字字符串只意味着不必为了C编译器而转义\。您仍然可以在正则表达式模式中转义\for。如果没有逐字记录字符串,这将是:

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

当然,对于这样简单的东西,正则表达式并不是最好的方法。

我正在这样做,但我正在处理ftpd客户端应用程序的配置文件,该应用程序需要我向该文件写入一定数量的字节。出于某种原因,当我使用file.writealText将文本写回文件时,它会将字节添加到文件的末尾,而如果我使用正则表达式,它会将字节覆盖,并且文件大小保持不变。这里没有将like与like进行比较-无法将regex.Replace与file.writealText进行比较。但是,如果您需要将相同数量的字节写入文件,这就引出了一个问题,即如果替换的文本较小,您想做什么。。。或更大。这是一个完全不同的问题,而不管是否使用正则表达式。我认为您混淆了这两个问题。这个字符串给我一个\$SERVERROOT\\pathpath的结果,我想要$SERVERROOT\pathpath@DavidFolksmannewPath变量不必像这样进行特殊转义,因为它不是正则表达式模式,我更喜欢Regex.Escape而不是手工处理这些问题。Regex.Escape的答案去了哪里?这对我很有效。作者删除了它们,可能是因为他们注意到string.Replace是一个更好的解决方案。
string pathToAmmend = "\\$SERVERROOT\\\\pathpath";