删除连续的空格但允许单个空格正则表达式

时间:2014-05-23 17:16:56

标签: regex erlang

让我们说这是文字输入

Text = "\s\n\t\s\s\n\t\s\n\s\s Hello\n\n\n\n\n\n\n\n\s\s\t\t\s\t Hello \s\s\n\n\n\t\s\s\s\n\t"    

我只是想删除连续的(空格或换行符或制表符),但保留单个和空格后跟空格应替换为\ n ...我希望输出为

"Hello\nHello"

我已经尝试过这个

RemoveTrails = re:replace(Text, "(^\\s+)|(\\s+$)", "", [global,{return,list}]),
Singlenewline = re:replace(RemoveTrails, "(\\n{2,})", "\n", [global,{return,list}]),
TrimmedText = re:replace(Singlenewline, "(\\s{2,})", "\s", [global,{return,list}])

这给了我输出

"Hello\n \t\t \t Hello"

我无法继续......我认为应该有一种简单的方法来实现预期的输出......请指导我这个

1 个答案:

答案 0 :(得分:1)

好吧,\s不是有效字符,所以你的输入文字有点偏。然而,在纠正之后,这应该做你想要的:

re:replace(Text, "([\r\n]?)\\s+", "\\1 ", [global, multiline, {return, list}]).

与“RemoveTrails”正则表达式结合使用,以清除任何不需要的前导/尾随空格。不幸的是你不能用一个正则表达式完成所有这些(或者你可以,但我不想看到它)