Java 使用正则表达式替换为另一个正则表达式

Java 使用正则表达式替换为另一个正则表达式,java,regex,Java,Regex,您好,我正在尝试以正确的格式替换错误插入的货币金额,如果格式正确,则必须执行任何操作,因此我编写了以下代码: import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestRegexReplace { public static void main(String[] args) { Pattern pattern = null; Matcher matc

您好,我正在尝试以正确的格式替换错误插入的货币金额,如果格式正确,则必须执行任何操作,因此我编写了以下代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegexReplace {

    public static void main(String[] args) {
        Pattern pattern = null;
        Matcher matcher = null;
        String regExp = "^([0-9]{2,3})\\.([0-9]{3})\\.([0-9]{2})$||^([0-9]{2,3})\\,([0-9]{3})([0-9]{2})$||^([0-9]{2,3})\\.([0-9]{3})([0-9]{2})$";

        String replacement = "($1\\,$2\\.$3)"; 
        String patternText[] = {"14.978.00", "14,97800", "14.97800", "14,978.00"};
        pattern = Pattern.compile(regExp);
        for(String text : patternText){
            matcher = pattern.matcher(text);
            System.out.println(text +" : " + matcher.matches());

            String value = text;
            if (value != null) {
                value = pattern.matcher(value).replaceAll(replacement);
                text = value;
                System.out.println(text);
            }
        }       
    }
}
此代码的输出如下所示:

14.978.00 : true
14,978.00,.
14,97800 : true
,.1,.4,.,,.9,.7,.8,.0,.0,.
14.97800 : true
,.1,.4,..,.9,.7,.8,.0,.0,.
14,978.00 : false
,.1,.4,.,,.9,.7,.8,..,.0,.0,.
而预期输出如下所示:

14.978.00 : true
14,978.00
14,97800 : true
14,978.00
14.97800 : true
14,978.00
14,978.00 : false
no changes 
这似乎奏效了

Pattern pattern = Pattern.compile("^(\\d{2,3})[.,]?(\\d{3})[.,]?(\\d{2})$");
String replacement = "$1,$2.$3";

String[] samples = {"14.978.00", "14,97800", "14.97800", "14,978.00"};
for (String sample : samples) {
    Matcher matcher = pattern.matcher(sample);
    System.out.println(sample + "\t= " + matcher.replaceAll(replacement));
}

识别货币金额的代码是正确的,而我所感受到的是纠正错误的货币金额。虽然我确信这里可以使用正则表达式,但我认为
DecmalFormat
更容易用于格式化输出。正则表达式几乎没有问题。首先,您使用的是
a | | b
,意思是
a
emptyString”“
b
。如果您想说
a
b
,请使用单管,如
a | b
。此外,在正则表达式中,您使用
($1\\,$2\\.$3)
作为替换,但组1仅存在于正则表达式的第一种情况中。在第一个
之后的组被索引为4,5,6,在另一个
之后的组被索引为7,8,9。