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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用正则表达式删除尾随空格?相关的知识,希望对你有一定的参考价值。

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

我试过了:

s+$

和:

([^
]*)s+

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


更新(2016年):

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

"trailing_spaces_trim_on_save": true

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

答案

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

[ 	]+$
另一答案

要删除任何空白尾随空格,请使用以下命令:


|^s+

我在Atom和Xcode编辑器中测试过。我希望它适用于某个人。

另一答案

要删除尾随空格同时还保留仅空白行,您希望正则表达式仅删除非空白字符后的尾随空格。因此,您需要首先检查非空白字符。这意味着非空白字符将包含在匹配中,因此您需要将其包含在替换中。

正则表达式:([^ ])[ ]+$

替换:1$1,取决于IDE

另一答案

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

正则表达式(假设the multiline option - 以下示例使用它):

    [ 	]+(
?$)

替换:

    $1

有关“ r?$”的说明,请参阅Regular Expression Options, Multiline Mode(MSDN)。

Code example

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

string inputText = "     Hello, World!  
" +
                   "  Some other line
" +
                   "     The last line  ";
string cleanedUpText = Regex.Replace(inputText,
                                     @"[ 	]+(
?$)", @"$1",
                                     RegexOptions.Multiline);
另一答案

正则表达式找到尾随和领先的空格:

^[ 	]+|[ 	]+$
另一答案

如果使用Visual Studio 2012及更高版本(which uses .NET regular expressions),则可以使用以下正则表达式删除尾随空格而不删除空行

替换(?([^ ])s)+( ? )

随着$1

Enter image description here


一些解释

您需要相当复杂的表达式的原因是字符类s匹配空格,制表符和换行符,因此s+将匹配仅包含空格的一组行。它无助于在此正则表达式中添加$终止,因为它仍将匹配仅包含空格和换行符的一组行。

你可能也想知道(正如我所做的)(?([^ ])s)表达式的含义。这是一个Alternation Construct,如果它不是回车符或换行符,它实际上意味着匹配空白字符类。

交替结构通常具有真假部分,

(?( expression ) yes | no )

但在这种情况下,未指定错误部分。

另一答案

要在忽略空行的同时删除尾随空格,我使用正面后视:

(?<=S)s+$

后视是从匹配中排除非空白( S)的方法。

另一答案

在Java中:



String str = "    hello world  ";

// prints "hello world" 
System.out.println(str.replaceAll("^(s+)|(s+)$", ""));


另一答案

[ | ]+$空置替换工程。 s+($)$1替换也有效。至少在Visual Studio Code中......

另一答案

您可以像这样简单地使用它: