【问题标题】:Replacing backslashes, forward slashes and double forward slashes with double backslashes用双反斜杠替换反斜杠、正斜杠和双正斜杠
【发布时间】:2015-08-19 08:25:12
【问题描述】:

如果我有以下字符串

"/test\\dso\dsa"

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

"\\test\\dso\\dsa"?

如果我尝试类似

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

它在中间造成了混乱(因为它添加了两次\\,因此添加了\\\\\\\\)。如何让它一次只匹配一个反斜杠?

【问题讨论】:

  • 我认为您输入中的\d 将被视为转义序列。
  • 字符串是否声明为逐字字符串文字,例如var s = @"/test\\dso\dsa"?
  • @stribizhev 是的。该函数使用(@"/test\\dso\dsa") 调用

标签: c# regex string


【解决方案1】:

您可以使用以下代码:

var FilePath = @"/test\\dso\dsa";
var myres = Regex.Replace(FilePath, @"[\\/]+", @"\\");

输出:

\\test\\dso\\dsa

正则表达式 [\\/]+ 匹配 1 个或多个 \/ 字符,然后用两个 \ 符号替换。

@"/|\\" 正则表达式的问题在于它与每个\/ 一个接一个地匹配,因此导致替换的次数超出了您的需要。此外,使用单独的符号作为替代品也不是一个好主意,因为涉及更多的回溯。最佳做法是将它们添加到字符类 [...]

【讨论】:

    【解决方案2】:

    你可以试试这个,

    Regex.Replace (FilePath, @"/|\\{1,2}", "\\\\");
    

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

    DEMO

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多