【问题标题】:Including Whitespace At the End of a Line When Regex Substituting a Character To the End of a Line正则表达式将字符替换到行尾时在行尾包含空格
【发布时间】:2021-04-24 03:28:55
【问题描述】:

假设我有以下内容(<space> 表示实际的空白字符)

Line 1
Line 2<space>
Line 3
Line 4<space>
Line 5

我希望它是

Line 1/
Line 2/
Line 3/
Line 4/
Line 5/

我最初认为s/\s*$/\//g 可能会起作用,但后来我得到了以下解决方案

Line 1/
Line 2//
Line 3/
Line 4//
Line 5/

我想不出一种方法来包含我想要替换的末尾有空格字符的情况。

【问题讨论】:

  • 您使用哪种语言?
  • @Nick 我在 vim 中使用文本替换
  • :%s/\s*$/\//g 完全在我手头的所有 Vim 版本中都符合您的期望:i.imgur.com/8YwlwCB.gif

标签: regex vim substitution


【解决方案1】:

\s*$ 可以匹配以空格结尾的字符串两次;一次捕获实际的空格字符,然后再次匹配字符串的结尾(参见例如this Q&A)。这就是为什么您在以空格结尾的字符串上得到两个替换。为避免此问题,请对非空格字符使用正向后视;这可以防止前面有空格的字符串的结尾再次匹配。在正常的正则表达式中,您将匹配:

(?<=\S)\s*$

并替换为/Demo on regex101.

vim 中,您可以使用\zs 标记来定义匹配的开始,例如

:%s/\S\zs\s*$/\//

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多