我遇到了分割类似以下字符串的问题:
43.80USD
我想要的是能够将表达式拆分为一个数组,其中第一个元素为“43.80”,第二个元素为“USD”。所以结果会是这样的:
[“43.80”,“USD”]
我确信有一些方法可以用正则表达式做到这一点,但我不够精通它自己搞清楚。任何帮助将不胜感激。
答案 0 :(得分: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'
上面的正则表达式使用 positive look-behind (?&lt; =)和 positive lookahead (?=)来查找分隔符(这里有零长度),前面有一个数字,后跟一个字母。
答案 1 :(得分: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
。答案 2 :(得分: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);
}