1

我在拆分类似于以下字符串的内容时遇到问题:

43.80美元

我想要的是能够将表达式拆分为一个数组,其中“43.80”作为第一个元素,“USD”作为第二个元素。所以结果会是这样的:

[“43.80”,“美元”]

我确信有一些方法可以用正则表达式来做到这一点,但我对它不够熟练,无法自己解决。任何帮助将非常感激。

4

3 回答 3

2

如果您的字符串的格式是固定的,您可以将其拆分如下

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

上面的正则表达式使用正向后视(?<=) 和正向前瞻(?=) 来查找前面有数字和后面有字母的分隔符(此处为零长度)。

于 2013-06-18T16:08:26.370 回答
1

如果您的数据确实看起来像,"43.80USD"那么您可以使用

"43.80USD".split("(?i)(?=[a-z])",2)
  • (?=[a-z])将在任何a-z字符之前拆分
  • (?i)将使使用的正则表达式不区分大小写,因此它也适用于uSd
  • 第二个参数是结果数组的最大大小,因为您不想要["43.80", "U", "S, "D"]["43.80", "USD"]我们需要使用2.
于 2013-06-18T16:06:39.563 回答
0

这个正则表达式有效(\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);
}
于 2013-06-18T16:00:24.287 回答