正则表达式:替换路径中多余的 slashes/backslashes
Regular Expressions: replace extra slashes/backslashes from a path
我有一个字符串,我想按照以下标准删除多余的斜线:
- 如果字符串的开头有多余的斜杠,如果连续超过 4 个,我想删除它们。我想用 4 个斜杠替换它们。
- 如果多余的斜杠不在开头而是在字符串的其他位置,如果连续超过 2 个,我想删除它们并用 2 个斜杠替换它们。
所以我尝试了以下但没有成功:
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 组捕获 /
或 \
,然后匹配零个或多个(反)斜杠。
我有一个字符串,我想按照以下标准删除多余的斜线:
- 如果字符串的开头有多余的斜杠,如果连续超过 4 个,我想删除它们。我想用 4 个斜杠替换它们。
- 如果多余的斜杠不在开头而是在字符串的其他位置,如果连续超过 2 个,我想删除它们并用 2 个斜杠替换它们。
所以我尝试了以下但没有成功:
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 组捕获/
或\
,然后匹配零个或多个(反)斜杠。