这是我的函数,我正在尝试替换文件中的字符串,但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;
但后来我有两个斜线,我只想要一个斜线。
答案 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,对于这些简单的正则表达式来说,这不是最好的方式。