77

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

我试过了:

\s+$

和:

([^\n]*)\s+\r\n

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


更新(2016):

现在我通过使用 Sublime 的TrailingSpaces包来自动化这样的代码清理,并带有自定义/用户设置:

"trailing_spaces_trim_on_save": true

它突出显示尾随空格并在保存时自动修剪它们。

4

10 回答 10

148

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

[ \t]+$
于 2012-03-02T11:15:31.497 回答
35

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

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

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

于 2014-01-29T04:13:00.840 回答
16

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

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

    [ \t]+(\r?$)

更换

    $1

有关“\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);
于 2015-05-31T15:22:03.977 回答
2

正则表达式查找尾随和前导空格:

^[ \t]+|[ \t]+$
于 2018-01-18T06:06:17.897 回答
2

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

代替(?([^\r\n])\s)+(\r?\n)

$1

在此处输入图像描述


一些解释

您需要相当复杂的表达式的原因是字符类\s匹配空格、制表符和换行符,因此\s+将匹配一组仅包含空格的行。给这个正则表达式添加一个终止符并没有帮助$,因为它仍然会匹配一组只包含空格和换行符的行。

您可能还想知道(正如我所做的)该(?([^\r\n])\s)表达式的确切含义。这是一个交替构造,如果它不是回车符或换行符,它实际上意味着匹配空白字符类。

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

(?( expression ) yes | no )

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

于 2018-07-13T10:46:47.437 回答
2

[ |\t]+$用空的替换作品。

\s+($)替换$1也可以,至少在 Visual Studio Code 中...

于 2018-12-10T21:36:42.750 回答
0

为了在忽略空行的同时删除尾随空格,我使用了积极的后视:

(?<=\S)\s+$

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

于 2016-04-16T23:46:45.893 回答
0

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

\n|^\s+\n

我在AtomXcode编辑器中进行了测试。

于 2019-04-09T10:46:45.170 回答
-1

在 Java 中:



String str = "    hello world  ";

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


于 2019-01-29T06:33:36.443 回答
-3

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

var regex = /( )/g;

样品:点击这里

于 2019-02-12T05:17:31.327 回答