如何使用正则表达式删除尾随空格?

ell*_*kie 58 regex whitespace trailing

我想删除代码中的尾随空格和制表符,而不删除空行.

我试过了:

\s+$
Run Code Online (Sandbox Code Playgroud)

和:

([^\n]*)\s+\r\n
Run Code Online (Sandbox Code Playgroud)

但他们都删除了空行.我猜也\s匹配行尾字符.


更新(2016年):

现在我使用Sublime的TrailingSpaces包自动执行这样的代码清理,具有自定义/用户设置:

"trailing_spaces_trim_on_save": true
Run Code Online (Sandbox Code Playgroud)

它突出显示尾随的空白区域,并在保存时自动修剪它们.

qbe*_*220 111

尝试删除尾随空格和制表符:

[ \t]+$
Run Code Online (Sandbox Code Playgroud)

  • @DanielF.就我而言,我使用的是文本编辑器(Notepad ++),它将每一行计为字符串,而不是整个文档作为字符串.因此,新行字符将被忽略.要处理不忽略换行符的情况,只需将它们添加到正则表达式:`([^\t\r \n])[\ t] + $` (6认同)
  • @DanielF.`([^\t])[\ t] + $`,但你必须用`\ 1`代替空字符串. (3认同)
  • @Koviko:既然你的评论是问题的正确解决方案,而你所评论的答案却没有,我建议你把这个正则表达式作为一个单独的答案发布.您的评论很有价值,但很容易错过. (2认同)

KOV*_*IKO 30

要删除结尾的空白,同时仅保留空白线,你想要的正则表达式,只除去尾随空白非空白字符.因此,您需要首先检查非空白字符.这意味着非空格字符将包含在匹配中,因此您需要将其包含在替换中.

正则表达式: ([^ \t\r\n])[ \t]+$

替换: \1或者$1,取决于IDE

  • @PeterMortensen Notepad ++,其中一个。 (2认同)

Pet*_*sen 11

没有指定平台,但在C#(. NET)中它将是:

正则表达式(假设多行选项 - 下面的示例使用它):

    [ \t]+(\r?$)
Run Code Online (Sandbox Code Playgroud)

更换:

    $1
Run Code Online (Sandbox Code Playgroud)

有关"\ r?$"的说明,请参阅正则表达式选项,多行模式(MSDN).

完整的代码示例

这将删除所有行中的所有尾随空格和所有尾随TAB:

string inputText = "     Hello, World!  \r\n" +
                   "  Some other line\r\n" +
                   "     The last line  ";
string cleanedUpText = Regex.Replace(inputText,
                                     @"[ \t]+(\r?$)", @"$1",
                                     RegexOptions.Multiline);
Run Code Online (Sandbox Code Playgroud)