正则表达式:除了第一个反斜杠之外,翻转并合并所有反斜杠

3

我正在尝试编写正则表达式,以翻转并合并除第一个之外的所有反斜杠。

类似这样:

 C:\a\b\c\d\e         --> C:/a/b/c/d/e
 C:\a\\b\\\c\d\\\\\\e --> C:/a/b/c/d/e
 C:/a///b//c/d//////e --> C:/a/b/c/d/e
 C:\a/\/b/\c/d//\///e --> C:/a/b/c/d/e
 C:/a/b/c/d/e         --> C:/a/b/c/d/e

但是

\\my_share\a\b\c\d/e             --> //my_share/a/b/c/d/e
\\my_share\\\a\\\\b\c\\\//\\d\e   --> //my_share/a/b/c/d/e
\\/\my_share\\\a\\\\b\c\\\\\\d\e --> //my_share/a/b/c/d/e (if multiple '\' or\and '/' in the front - put two //)
\my_share\\\a\\\\b\c\\\\\\d\e    --> /my_share/a/b/c/d/e (if one '\' or\and '/' in the front - flip it)
my_share\\\a\\\\b\c\\\\\\d\e     --> my_share/a/b/c/d/e (if no '\' or\and '/' in the front - don't do anything)

如何在PowerShell中执行此操作?$my_path -ireplace "\\", "/"
1个回答

5
您可以使用:
$s = 'C:\a\b\c\d\e'
[regex]::Replace($s,'^([\\/]{2,})|[\\/]+',{param($match) If ($match.Groups[1].Success) { '//' } Else { '/' }})

正则表达式匹配

  • ^([\\/]{2,}) - 第一组,表示字符串开头有两个或更多的/\字符
  • | - 或者
  • [\\/]+ - 表示任意位置上有一个或多个/\字符。

如果第一组匹配成功,则使用//替换,否则使用/


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