有個看我的Blog而加入我的msn一個網友,有個Regex問題如下:
1101,"24,236,136","7,256","641,351,276","123",25.50,27.10,25.50,26.60,+,1.20,26.55,213,26.60,125,10.73
按逗號split數字,但雙引號內的逗號是千分位,不能當作分隔號。若沒有千分位,Regex很好下:"?,"?。有千分位的話,Google的結果也不能一次解決,只能看位數長度再看Regex怎麼下,玩這個只是練功,效能未必好。程式片段如下:
String s = "1101,\"24,236,136\",\"7,256\",\"641,351,276\",\"123\",25.50,27.10,25.50,26.60,+,1.20,26.55,213,26.60,125,10.73"; |
得到結果是: 1101,"24,236,136","7,256","641,351,276","123",25.50,27.10,25.50,26.60,+,1.20,26.55,213,26.60,125,10.73 |
上述Regex Pattern只能到九位數,六位數的話應是:s.replaceAll("\"(\\d{1,3})(,(\\d{3}))?\"", "$1$3");。
若十二位數:s.replaceAll("\"(\\d{1,3})((,(\\d{3}))((,(\\d{3}))(,(\\d{3}))?)?)?\"", "$1$4$7$9");
目前並沒有相對於+、?、*及{m, n}的量詞group。不知更新版的Perl有無進化。在今年的OSDC看Perl簡報內容,其實已將Perl 5.x和Perl 6視為兩種不同的語言了。不過學到Regular Expression這麼好用的工具,要感謝過去的他,現在的她,未來的祂(因為還不肯定)。