我想从文本文件中删除每行的尾随空格,保持换行符不变。我正在使用Visual Studio 2012的Regex功能。
当我试图找到\s*\r?\n
并替换为\r\n
时,它也会删除所有空行,这是不期望的。
我有什么遗失的吗?
答案 0 :(得分:6)
将减法设置为救援!
[\s-[\n]]+\n
...或任何空格字符(\s
),但(-
)换行({{ 1}})。通常,[\n]
被视为范围运算符或文字连字符(取决于它在字符类中的位置),-
被视为文字括号。但是如果连字符后跟一个看起来像字符类的东西,它就变成了一个set减法运算符。
答案 1 :(得分:3)
如果您不想替换它们,然后用\r
替换所有内容,为什么要尝试匹配回车\n
和换行符\r\n
。
而是仅匹配空格和制表符以及要删除的任何其他空白字符,并将其替换为空字符串,如下所示:
[ \t]*$
这将匹配每行末尾的零个或多个空格或制表符,并用空字符串替换它们。
注意:您必须使用多行模式,因此$
匹配每行的末尾。
如果你无法在VS中激活多线模式,那么你可以使用另一个不需要的表达式:
[ \t]*(?=\r?\n)
这将匹配零个或多个制表符和空格,只要它们后面跟一个可选的回车符然后换行符,换句话说,只要它们位于行尾。
答案 2 :(得分:0)
我知道这是旧的,但我使用搜索并用此字符串替换Visual Studio的正则表达式(没有引号) “+ \ r?$”并将替换字段留空,然后只需替换所有。这样可以保留换行符并适用于VS正则表达式。