如何在正则表达式中全局匹配斜杠,除非它位于字符串的开头

How to match slashes globally in regex except if it is at the start of the string

你好 Whosebugers,

我自己想不出解决办法,也找不到相关的答案,所以我寻求你的帮助:)

我在 VB.Net 4.x 环境中工作,我通常必须加入来自各种来源的 windows 样式路径,这些路径的格式非常不可靠(前导斜杠,结尾斜杠,有时里面有双斜杠)因此我不能使用 Path.Join

我的下一个最佳猜测是使用正则表达式将反斜杠的任何两次出现替换为单个反斜杠: \+

这太天真了,因为它还会转换以前导双反斜杠开头的服务器地址。

伪代码

"\server123\a\b\\c\".replace(/\+/g, "\") -> "\server123\a\b\c"

这是个问题。我想从匹配中排除任何前导反斜杠。所以我虽然我否定了它:

正则表达式

(?!^\+)\+

这在我的示例中有效。但这不是我想要它做的。它匹配第二个反斜杠斜杠并替换它。

我的第二个正则表达式有什么问题?我如何在开始时否定前瞻性。

感谢任何解释和解决方案

您可以使用

Regex.Replace(text, "(?<!^\*)\+", "\")

参见.NET regex demo and the VB.NET online demo

详情:

  • (?<!^\*) - 如果在当前位置的左侧紧邻字符串
  • 的开头有零个或多个反斜杠,则匹配失败的负后视
  • \+ - 一个或多个反斜杠。