删除连续的空白,但允许单个空白regex erlang

删除连续的空白,但允许单个空白regex erlang,regex,erlang,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+$)", "", [gl

假设这是文本输入

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"

我不能再进一步了…我认为应该有一个简单的方法来实现预期的产出。。。请在这方面指导我。

嗯,
\s
不是有效字符,因此您的输入文本有点不正确。然而,在纠正了这一点之后,这应该符合您的要求:

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

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

嗯,
\s
是一个有效字符,但不是空白字符。不要将
\s
与空格字符代码混淆;它是正则表达式中的一个字符类,覆盖空格和制表符(在多行情况下还包括换行符)。另外,请注意,在
[\r\n]
中,我并没有双重转义斜杠;这里没必要。谢谢你纠正和帮助我喝坎贝尔汤。。。但是现在的输出是“Hello\n\n\n\nHello”…@user27841-我得到的输出是“Hello\n Hello”;确保你得到了一切(包括多行选项)@user27841-抱歉,从bash复制破坏了我添加的命令。正则表达式部分应该是:
“([\r\n]?)\\s+”
(在\\s之后添加+)谢谢您的代码。。。它很好用。。。当输入文本为“Hello Hello”或“Hello\n\n\n Hello”时,输出为“HelloHello”,而不是分别为“Hello Hello”和“Hello\nHello”。。。