使用双反斜杠替换反斜杠、正斜杠和双正斜杠

3

如果我有以下字符串:

"/test\\dso\dsa"

如何使用正则表达式将其转换为:

"\\test\\dso\\dsa"

如果尝试类似于以下代码:

Regex.Replace (FilePath, @"/|\\", @"\\");

在中间创建了一堆混乱(因为它两次添加了\\,从而添加了\\\\\\\\)。我该如何使其仅匹配一个反斜杠?


我认为你输入的\d会被视为转义序列。 - Avinash Raj
该字符串是否声明为逐字字符串文字,例如 var s = @"/test\\dso\dsa" - Wiktor Stribiżew
@stribizhev 是的。该函数使用 (@"/test\\dso\dsa") 调用。 - MKII
2个回答

2
您可以使用以下代码:
var FilePath = @"/test\\dso\dsa";
var myres = Regex.Replace(FilePath, @"[\\/]+", @"\\");

输出:

\\test\\dso\\dsa

正则表达式[\\/]+匹配1个或多个\/字符,然后用两个\符号替换它们。
使用@"/|\\"正则表达式的问题在于它一个一个地匹配每个\/,因此会导致比需要更多的替换。而且,使用单独的符号作为备选项并不是一个好主意,因为这会涉及更多的回溯。最佳实践是将它们添加到字符类[...]中。

1
你可以尝试这个,
Regex.Replace (FilePath, @"/|\\{1,2}", "\\\\");

\\{1,2}将匹配单个或双个反斜杠。

演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接