只有在 C# 中没有 space 时,才将正斜杠替换为 space 前后

Replace forward slash with space before and after only if no space in C#

我有以下输入:

aaa/bbb
ccc/ ddd
eee /fff
ggg / hhh
/iii/jjj/

我想确保所有正斜杠(字符串末尾的斜杠除外)前后都有 space。结果将是:

aaa / bbb
ccc / ddd
eee / fff
ggg / hhh
/iii / jjj/

到目前为止,我有以下正则表达式:

(?<=\/)(?!$)

但这还远未奏效。如果能为此找出正确的正则表达式,我们将不胜感激。语言是C#。

您可以使用

var output = Regex.Replace(text, @"\s*(?<!^\s*)/(?!\s*$)\s*", " / ", RegexOptions.Multiline);

regex demo

详情:

  • \s* - 零个或多个空格
  • (?<!^\s*) - 如果行的开头紧接着左边有零个或多个空格
  • ,则否定后视会导致匹配失败
  • / - 一个 / 字符
  • (?!\s*$) - 如果有零个或多个空格后跟紧跟在右侧的行尾位置,则匹配失败的否定前瞻
  • \s* - 零个或多个空格。

或者,另一种变体:

var output = Regex.Replace(text, @"(?<=(?<!^)/(?!\s|$))|(?=(?<!^|\s)/(?!$))", " ");

参见 this regex demo

详情:

  • (?<=(?<!^)/(?!\s|$)) - / 之后的位置,既不在字符串的开头也不在字符串的结尾,并且后面没有空格
  • | - 或
  • (?=(?<!^|\s)/(?!$)) - / 之前的位置,既不在字符串的开头也不在字符串的结尾,并且前面没有空格。