逃脱单反双斜线

时间:2013-11-02 12:52:08

标签: c# regex

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

我的字符串文字(正在从文本文件中读取),

-s \"t\"

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

-s \"n\"

我能想到的最好的是

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

中间参数不会编译,因为单反斜杠和双反斜杠。它会接受一个或另一个,但不是两个(不管我使用@的天气)。

我没有那么多使用正则表达式,所以它可能很简单,但我很困难!

由于

2 个答案:

答案 0 :(得分:2)

问题正在发生,因为\对字符串和正则表达式都有特殊含义所以它通常需要双重转义,除非你使用@并在这里添加问题是{的存在{1}}本身在需要转义的字符串中。

尝试以下方法:

"

使用schedule = Regex.Replace(schedule, @"-s\s\\""\w\\""", @"-s \""n\"""); 后,@在字符串中没有特殊含义,但它在正则表达式表达式中仍然具有特殊含义,因此如果字面上需要它只需要转义一次

现在你需要使用\来逃避字符串中的""(否则你将如何逃避它,因为"不再具有特殊含义)

答案 1 :(得分:1)

这有效:

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

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

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