2012-10-09 61 views
8

Sé que hay una cadena: strip en erlang. Pero su comportamiento es extraño para mí.Cómo pelar todos los caracteres en blanco en una cadena en Erlang?

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 

Y necesito una función para eliminar todo lo cual lleva/arrastrando caracteres en blanco, incluidos los espacios en blanco, \ t, \ n \ r etc.

some_module:better_strip(A) % => [] 

¿Se han Erlang una función puede hacer esto? O si tengo que hacer esto yo mismo, ¿cuál es la mejor manera?

+0

No es "extraño", está documentado que solo recorta * espacios en blanco * aka espacios: http://erlang.org/doc/man/string.html#strip-1. – Tommy

Respuesta

14

Prueba esto:

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

Pruebe esta construcción:

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

Ejemplo de sesión:

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" 

ACTUALIZACIÓN

encima solución se tira de símbolos espacio dentro de la cadena también (y no sólo conduce cola).

Si necesita desvestirse, sólo se lleva y tizón, se puede usar algo como esto:

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

sesión Ejemplo:

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" 
+1

Esto eliminará también el espacio en blanco que no sea líder/final. – Tilman

+1

Sí. Si necesita quitar solo los símbolos de encabezado y de cola, puede usar dos construcciones 're: replace (A, "^ \\ s +", "", [global, {return, list}])'. y 're: replace (A, "\\ s + $", "", [global, {return, list}]).' – fycth

0

Usando una función incorporada: string:strip/3, puede tener una abstracción general

 
clean(Text,Char)-> string:strip(string:strip(Text,right,Char),left,Char). 
Elque usaría así:

 
Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\Windows\System32>erl 
Eshell V5.9 (abort with ^G) 
1> Clean = fun(Text,Char) -> string:strip(string:strip(Text,right,Char),left,Char) end. 
#Fun<erl_eval.12.111823515> 
2> Clean(" Muzaaya ",32). 
"Muzaaya" 
3> Clean("--Erlang Programs--",$-). 
"Erlang Programs" 
4> Clean(Clean("** WhatsApp Uses Erlang and FreeBSD in its Backend ",$*),32). 
"WhatsApp Uses Erlang and FreeBSD in its Backend" 
5> 

Esta es una manera limpia, y general. El Char debe ser un valor ASCII.

+0

Gracias. Pero sé esto y escribo por qué no lo uso en la pregunta. – halfelf

Cuestiones relacionadas