0

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

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

4

2 回答 2

7

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

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

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

于 2013-07-31T15:18:58.493 回答
3

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

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

@用于创建逐字字符串仅意味着您不必\为了 C# 编译器而转义。您仍然可以\在正则表达式模式中转义 for。如果没有逐字字符串,这将是:

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

当然,正如Jon Skeet指出的那样,对于这种简单的正则表达式并不是最好的方法。

于 2013-07-31T15:19:40.823 回答