1

我想从文本文件中删除每一行的尾随空格,保持换行符不变。为此,我正在使用 Visual Studio 2012 的 Regex 功能。

当我尝试查找\s*\r?\n并替换\r\n它时,它也会删除所有空行,这是意料之外的。

有什么我想念的吗?

4

3 回答 3

8

设置减法来拯救!

[\s-[\n]]+\n

...或( )换行符( ) 之外的任何空白字符( \s) 。通常,被视为范围运算符或文字连字符(取决于其在字符类中的位置),并被视为文字括号。但是如果连字符后面跟一个看起来像字符类的东西,它就变成了一个集合减法运算符。-[\n]-[

ref:正则表达式中的字符类

于 2013-09-13T09:37:23.570 回答
3

如果您不想替换它们,为什么要尝试匹配回车符\r和换行符,然后将所有内容替换为.\n\r\n

而是仅匹配空格和制表符以及您想要剥离的任何其他空白字符,并将其替换为空字符串,如下所示:

[ \t]*$

这将匹配每行末尾的零个或多个空格或制表符,并将它们替换为空字符串。

注意:您必须使用多行模式,以便$在每行的末尾匹配。

如果您无法在 VS 中激活多行模式,那么您可以使用另一个不需要的表达式:

[ \t]*(?=\r?\n)

这将匹配零个或多个制表符和空格,只要它们后跟可选的回车符,然后是换行符,或者换句话说,只要它们位于行尾。

于 2013-09-13T06:57:56.570 回答
2

我知道这很旧,但我使用 Visual Studio 的正则表达式搜索并替换此字符串(无引号)“+\r?$”并将替换字段留空,然后全部替换。这保留了换行符并适用于 VS 正则表达式风格。

于 2017-09-01T13:52:19.560 回答