2012-10-09 41 views
8

Tôi biết có chuỗi: strip in erlang. Nhưng hành vi của nó là lạ đối với tôi.Làm thế nào để loại bỏ tất cả các ký tự trống trong một chuỗi trong 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 

Và tôi cần một chức năng để xóa tất cả các hàng đầu/đuôi chars trống, bao gồm khoảng trắng, \ t \ n, \ r, vv

some_module:better_strip(A) % => [] 

Liệu erlang đã một chức năng có thể làm được điều này? Hoặc nếu tôi phải tự làm điều này, cách tốt nhất là gì?

+0

Nó không phải là "lạ", đó là tài liệu rằng nó chỉ trims * khoảng trắng * aka không gian: http://erlang.org/doc/man/string.html#strip-1. – Tommy

Trả lời

14

Hãy thử điều này:

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

Cố gắng xây dựng này: phiên

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

Ví dụ:

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" 

CẬP NHẬT

Trên giải pháp sẽ dải ký tự không gian bên trong chuỗi quá (không chỉ hàng đầu và tailing).

Nếu bạn cần dải chỉ dẫn và tailing, bạn có thể sử dụng một cái gì đó như thế này:

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

phiên Ví dụ:

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

Thao tác này cũng sẽ xóa khoảng trống không dẫn đầu/theo sau. – Tilman

+1

Có. Nếu bạn chỉ cần tách các ký hiệu hàng đầu và đuôi, bạn có thể sử dụng lại hai cấu trúc: thay thế (A, "^ \\ s +", "", [global, {return, list}]). ' và 'lại: thay thế (A, "\\ s + $", "", [global, {return, list}]).' – fycth

0

Sử dụng một được xây dựng trong chức năng: string:strip/3, bạn có thể có một trừu tượng chung

 
clean(Text,Char)-> string:strip(string:strip(Text,right,Char),left,Char). 
Bạn sẽ sử dụng nó như sau:

 
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> 

Đây là một cách rõ ràng và chung chung. Char phải là giá trị ASCII.

+0

Cảm ơn. Nhưng tôi biết điều này và viết lý do tại sao tôi không sử dụng nó trong câu hỏi. – halfelf

Các vấn đề liên quan