Java的正则表达式从字符串双分裂(Java regex split double from str

2019-09-28 19:02发布

我有一个问题拆分类似下面的字符串:

43.80USD

我想是能够表达分成具有“43.80”作为第一个元素和“USD”作为第二个阵列。 所以结果会是这样的:

[ “43.80”, “USD”]

我相信有一些方法用正则表达式来做到这一点,但我没有足够的与它精通数字出来我自己。 任何帮助将非常感激。

Answer 1:

如果你的字符串的格式是固定的,你可以如下把它分解

String[] currency = "48.50USD".split("(?<=\\d)(?=[a-zA-Z])");
System.out.println("Amount='"+currency[0]+"'; Denomination='"+currency[1]+"'");
// prints: Amount='48.50'; Denomination='USD'

上述正则表达式使用正向后看 (?<=)和正超前 (?=)找到一个分离器(它是零长度的这里)这是前面有一个编号,接着一个字母。



Answer 2:

如果你的数据真的看起来像"43.80USD"那么你可以使用

"43.80USD".split("(?i)(?=[a-z])",2)
  • (?=[az])将之前的任何的分裂az字符
  • (?i)将使用正则表达式不区分大小写的,因此也会为工作uSd
  • 第二个参数是结果数组的最大大小,因为你不希望["43.80", "U", "S, "D"]["43.80", "USD"]我们需要使用2


Answer 3:

此正则表达式作品(\d*\.\d*)([a-zA-Z]*) 组1将是量,包括小数。 第2组将是美元或其它货币的名称。 请注意,这正则表达式只需要一个小数点,其他一切都是可选的。 因此,这也符合“45123.15542ABCDEFG”。 组1将45123.15542和组2将ABCDEFG。 如果您想了解更多严格的要求,告诉我他们是什么和虐待把它放在否则,代码会看起来像:

Pattern p = Pattern.compile("(\\d*\\.\\d*)([a-zA-Z]*)");//Note the double \\ to escape twice.
Matcher m = p.matcher("43.80USD");
String amount, type;
if(m.matches){
    amount = m.group(1);
    type = m.group(2);
}


文章来源: Java regex split double from string