首页 > 解决方案 > 仅当 C# 中没有空格时,才用空格替换正斜杠

问题描述

我有以下输入:

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

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

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

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

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

但这还远未奏效。任何帮助将不胜感激找出正确的正则表达式。语言是 C#。

标签: c#regexc#-4.0

解决方案


您可以使用

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

查看正则表达式演示

详情

  • \s*- 零个或多个空格
  • (?<!^\s*)- 如果行的开头紧跟左侧的零个或多个空格,则匹配失败的负向后查找
  • /- 一个/字符
  • (?!\s*$)- 如果有零个或多个空格紧跟在右侧的行尾位置,则匹配失败的负前瞻
  • \s*- 零个或多个空格。

或者,另一种变体:

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

请参阅此正则表达式演示

详情

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

推荐阅读