正则表达式:替换路径中多余的 slashes/backslashes

Regular Expressions: replace extra slashes/backslashes from a path

我有一个字符串,我想按照以下标准删除多余的斜线:

所以我尝试了以下但没有成功:

string myPath = "/////this///is//an////absolute//path";
        

// below check if there are more than 4 slashes at the beginning. If so replace them by 4 slashes
string url  = System.Text.RegularExpressions.Regex.Replace(myPath  , @"^(/+){4}", @"////");
// below check if there are extra slashes (more than 2) in other parts of string (excluding the beginning of the string). If so, replace them by 2 slashes.
url= System.Text.RegularExpressions.Regex.Replace(url, @"(/+){3}", @"//");

示例:

string = "/////this///is//an////absolute//path"

预计url:

////this//is//and//absolute//path

当前url:

//this//is//and//absolute//path

此外,我想在单个正则表达式中执行此操作,而不是将其拆分为两个语句,并在反斜杠而不是斜杠的情况下工作,例如,相同的正则表达式也应该能够执行此操作:

\\\this\\is\an\\absolute\path

预计

\\this\is\an\absolute\path

此外它应该对以下路径有效(所有斜杠或反斜杠):

c:\\\this\\is\an\\absolute\path

预计

c:\this\is\an\absolute\path

所以在某些情况下,字符串带有所有斜杠或所有反斜杠,我需要它适用于这两种情况。

我建议

Regex.Replace(text, @"^(([/\]){3})+|([/\])*", "")

regex demo详情:

  • ^ - 字符串开头
  • (([/\]){3}) - 第 1 组捕获 /\ 捕获到第 2 组,然后匹配捕获到第 2 组的字符三次
  • + - 第 2 组值出现一次或多次
  • | - 或
  • ([/\])* - 第 3 组捕获 /\,然后匹配零个或多个(反)斜杠。