有個看我的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這麼好用的工具,要感謝過去的他,現在的她,未來的祂(因為還不肯定)。

學弟,你的問題是什麼呢?是把在引號內數字逗號去掉嗎?s/\"[\d\,]1+\"/{$&=~s/,//;}/ge; 太久沒用,寫錯不要K 我~
練功一下而已, 而且我是要用Java,所以無法用Perl
可能是 gxe, 不管是 perl or java, 你懂我解法吧? ^^
你有興趣練功的話,寫一個阿拉伯數字轉國字圓角分的程式吧~ ;)
340002.23=>參拾肆萬零貳圓貳角參分整
你的解法太高深了, 有空再練^^