11

我知道 erlang 中有 string:strip 。但它的行为对我来说很奇怪。

A = "  \t\n"  % two whitespaces, one tab and one newline
string:strip(A)   % => "\t\n"
string:strip(A,both,$\n)  %  string:strip/3 can only strip one kind of character

我需要一个函数来删除所有前导/尾随空白字符,包括空格、\t、\n、\r 等。

some_module:better_strip(A)    % => []

erlang有一个功能可以做到这一点吗?或者如果我必须自己这样做,最好的方法是什么?

4

5 回答 5

18

试试这个:

re:replace(A, "(^\\s+)|(\\s+$)", "", [global,{return,list}]).
于 2012-10-09T08:37:01.697 回答
9

试试这个结构:

re:replace(A, "\\s+", "", [global,{return,list}]).

示例会话:

Erlang R15B01 (erts-5.9.1) [source] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
1> A = "  21\t\n  ".
"  21\t\n  "
2> re:replace(A, "\\s+", "", [global,{return,list}]).
"21"

更新

上述解决方案也会在字符串中去除空格符号(不仅是前导和尾随)。

如果您只需要去除前导和尾随,则可以使用以下内容:

re:replace(re:replace(A, "\\s+$", "", [global,{return,list}]), "^\\s+", "", [global,{return,list}]).

示例会话:

Erlang R15B01 (erts-5.9.1) [source] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
1> A=" \t \n 2 4 \n \t \n  ".
" \t \n 2 4 \n \t \n  "
2> re:replace(re:replace(A, "\\s+$", "", [global,{return,list}]), "^\\s+", "", [global,{return,list}]).
"2 4"
于 2012-10-09T07:09:16.630 回答
8

现在用string:trim

1> string:trim("  \t\n").
[]
于 2018-10-29T21:16:18.620 回答
1

使用内置函数:string:strip/3,你可以有一个通用的抽象

clean(Text,Char)-> string:strip(string:strip(Text,right,Char),left,Char)。
你会像这样使用它:

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。版权所有。

C:\Windows\System32>erl
Eshell V5.9(使用 ^G 中止)
1> Clean = fun(Text,Char) -> string:strip(string:strip(Text,right,Char),left,Char) 结束。
#Fun<erl_eval.12.111823515>
2> 清洁(“穆扎亚”,32)。
“穆萨亚”
3> Clean("--Erlang 程序--",$-).
“Erlang 程序”
4> Clean(Clean("** WhatsApp 在其后端使用 Erlang 和 FreeBSD ",$*),32)。
“WhatsApp 在其后端使用 Erlang 和 FreeBSD”
5>

这是一种干净的方式,而且是通用的。Char必须是 ASCII 值。

于 2012-10-10T06:04:31.173 回答
1

这是在erlang中执行此操作的简短方法:

145> A = "  \t\n".
"  \t\n"
146> A1 = [X || X<-A, X =/= 32].
"\t\n"

上面的 32 代表一个' '字符。

于 2020-02-11T23:53:31.937 回答