2009-05-12 2 views
1

T = {XMLELEMENT、 "プレゼンス" を使用して空白を削除[{ "XML:langの"、 "EN"}]、 [{XMLCDATA、< < "\ n" は>>}、 {XMLELEMENT 、 "優先度"、[]、 [{XMLCDATA、< < "5" >>}]}、{ XMLCDATA、< < "の\ n" >>}、{ XMLELEMENT、 "C"、 [{」 xmlns "、 " http://jabber.org/protocol/caps "}、 {" node "、" http://psi-im.org/caps "}、 {" ver "、" 0.12.1 "}、 {\ n ""}}}} {} "}"} "} {}"} {} "}、アーラン正規表現を

すべての空白i..eタブ/スペース/改行文字を削除します。私は次のことを試してみましたが、それは動作しません:

trim_whitespace(Input) -> 
re:replace(Input, "(\r\n)*", ""). 

答えて

5

あなたは、文字列のすべてを削除したい場合は、再度するグローバルオプションを渡す必要があります:置き換え()。また、正規表現を使って改行を置き換えるだけです。呼び出しはおそらく次のようになるはずです:

+0

私は次のエラーを取得する: ソケット:trim_whitespace(P)。 **例外エラー:不正な引数 が関数内にあります:replace/4 ソケット:trim_whitespace(P)。 **例外エラー:関数の再で悪い引数 :置き換え/ 4 再と呼ばれる:!、({XMLELEMENT、「プレゼンス」 を交換.... –

+0

申し訳ありませんが、私はmanページを読み違える私の編集を参照してください – mkb

0

問題の空白はすべて、cdataセクションにあります - なぜタプルからフィルタリングしないのですか?

remove_cdata(List) when is_list(List) -> 
    remove_list_cdata(List); 
remove_cdata({xmlelement, Name, Attrs, Els}) -> 
    {xmlelement, Name, remove_cdata(Attrs), remove_cdata(Els)}. 

remove_list_cdata([]) -> 
    []; 
remove_list_cdata([{xmlcdata,_}|Rest]) -> 
    remove_list_cdata(Rest); 
remove_list_cdata([E = {xmlelement,_,_,_}|Rest]) -> 
    [remove_cdata(E) | remove_list_cdata(Rest)]; 
remove_list_cdata([Item | Rest]) -> 
    [Item | remove_list_cdata(Rest)]. 


remove_cdata(T) =:= 
    {xmlelement,"presence", 
    [{"xml:lang","en"}], 
    [{xmlelement,"priority",[],[]}, 
     {xmlelement,"c", 
     [{"xmlns","http://jabber.org/protocol/caps"}, 
     {"node","http://psi-im.org/caps"}, 
     {"ver","0.12.1"}, 
     {"ext","cs ep-notify html"}], 
     []}]} 
+0

午前。すべての\ r \ n文字を削除しようとしていますが、私はそれを私のperlプログラムに送ることができるように、一行で表示したいのですが、そのためには\ r \ nをタプル全体から取り除く必要があります。 –

+0

そのerlangタプルを文字列(改行/改行なし)にシリアル化したいのですか? – archaelus

1

私は私のより効率的な作業を共有するためにここに来た...同じ問題に直面していました:

trim(Subject) -> 
    {match, [[Trimmed]|_]} = re:run(Subject, "^\\s*([^\\s]*(?:.*[^\\s]+)?)\\s*$", 
    [{capture, all_but_first, binary}, global, dollar_endonly, unicode, dotall]), 
    Trimmed. 

考え方はまったく同じです。正規表現はちょうど良いです。

0

再:を置き換えるには、心に留めておくべきトリッキーな、何かである:

Eshell V5.9.3.1 (abort with ^G) 
1> re:replace("0 1 2 3 4 5 6 7 8 9", " ", "", [global, {return, list}]). 
"" 
2> re:replace("0 1 2 3 4 5 6 7 8 9", " ", "", [{return, list}]). 
"01 2 3 4 5 6 7 8 9" 
3> re:replace("0 1 2 3 4 5 6 7 8 9", " ", ""). 
[<<"0">>,[]|<<"1 2 3 4 5 6 7 8 9">>]