【问题标题】:Replace forward slash with space before and after only if no space in C#仅当 C# 中没有空格时,才用空格替换正斜杠
【发布时间】:2021-06-15 03:55:38
【问题描述】:

我有以下输入:

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

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

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

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

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

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

【问题讨论】:

    标签: c# regex c#-4.0


    【解决方案1】:

    你可以使用

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

    regex demo

    详情

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

    或者,另一种变体:

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

    this regex demo

    详情

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

    【讨论】:

    • Wiktor,非常感谢您的出色工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多