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。