0

我正在尝试使用正则表达式替换字符串,但是我似乎无法找到一种方法来使用字符串的双反斜杠来转义正则表达式的单个反斜杠。

我的字符串文字(这是从文本文件中读取的,原样)

-s \"t\"

我想用(再次作为字符串文字)替换它

-s \"n\"

我能想到的最好的是

schedule = Regex.Replace(schedule, "-s\s\\\"\w\\\"", "-s \\\"n\\\"");

由于单反斜杠和双反斜杠,中间参数无法编译。它将接受一个或另一个,但不能同时接受(无论我使用@的天气如何)。

我没有那么多使用正则表达式,所以它可能是一个简单的,但我很卡住!

谢谢

4

2 回答 2

2

问题正在发生,因为\对于字符串和正则表达式都有特殊含义,因此它通常需要进行双重转义,除非您使用@并添加到这里的问题是"它自身存在于需要转义的字符串中。

尝试以下操作:

schedule = Regex.Replace(schedule, @"-s\s\\""\w\\""", @"-s \""n\""");

使用后@\在字符串中没有特殊含义,但在正则表达式中仍然有特殊含义,所以如果字面需要,只需要转义一次。

此外,现在您需要在字符串内""转义(否则您将如何转义它,因为不再具有特殊含义)"\

于 2013-11-02T12:54:23.937 回答
1

这有效:

var schedule = @"-s \""t\""";
// value is -s \"t\"
schedule = Regex.Replace(schedule, @"-s\s\\""\w\\""", @"-s \""n\""");
// value is -s \"n\"

转义很复杂,因为在 C#\"正则表达式中编码字符串的方式都有特殊含义。搜索模式是(没有任何转义)C# string -s\s\\"\w\\",它告诉正则表达式查找一个 literal\和一个 literal "。替换字符串是-s \"n\",因为您不需要转义替换字符串中的反斜杠。

当然,您可以使用普通字符串 ( "...") 而不是逐字字符串 ( ) 来编写@"..."它,但它会变得更加混乱。

于 2013-11-02T13:00:11.633 回答