2014-12-19 16 views
0

在我的計算器應用程序,我有這樣的正則表達式來提取號碼,並將組與千位分隔符

String input = "-.46sin(34)*23000.34(2^3"

我想千個分隔符添加到數字字符串 使輸出會在一個字符串如:

-.46sin(34)*23,000.34(2^3

如何我正則表達式實現這一目標?和我一起工作的語言是Java和浮動精度爲6​​

更新:在註釋通過烏盧格別克Umirov
最後的答案是正確的答案
正則表達式:
(?<!\.\d{0,6})\d+?(?=(?:\d{3})+(?:\D|$))

Java代碼:
String output = input.replaceAll("(?<!\\.\\d{0,6})\\d+?(?=(?:\\d{3})+(?:\\D|$))", "$0,");

+3

替換它,你有一些代碼? –

+0

一般來說,我會建議使用正則表達式('\ d'派上用場)解析數字,然後用其他格式對其進行格式化。如果你的應用程序是一個計算器,爲了評估這樣的表達式,你將不得不分析和構建一個AST。 – 9000

+0

@Paul Vargas我不認爲需要任何代碼。 這是一個普遍的問題......我打算使用java 使用正則表達式的String.replace(Target,Replacement)方法 – 9patchcoder

回答

0

以下正則表達式可以爲您提供這樣的想法:

(?<!\d\.\d{0,6})\d+?(?=(?:\d{3})+(?:\D|$)) 

Regular expression visualization

$0,

Demo

+0

Ulugbek Umirov 只有一件事......當我用這個測試案例「.46sin(34 )* 23000.34 + .5623(0.3333^3 * 1300000「 浮點數.5623也得到逗號。 有沒有辦法解決這個問題? – 9patchcoder

+0

@ 9patchcoder是的,我假設總是有一個數字在點之前。可以通過使用以下正則表達式來消除這個假設:'(?<!\。\ d {0,6})\ d +?(?=(?:\ d {3})+(?:\ D | $)) ' –

相關問題