我尝试首先将一个字符串与正则表达式模式匹配,然后使用第二个模式来格式化该字符串。据我所读,实现此目标的一种方法是使用.replaceAll()
( edit :.replaceAll()
并非用于此目的,请阅读有关答案的评论进行澄清)
我创建了此功能,目的是:
match
使用format
正则表达式格式化给定的字符串
String match = "(^[A-Z]{2}[0-9]{2}[A-Z]{3}$)";
String format = "(^[A-Z]{2}[0-9]{2}[*\\s\\\\][A-Z]{3}$)";
String input = "YO11YOL"
if (input.matches(match)) {
return input.replaceAll(input, "??");
}
输出应为YO11 YOL
,并在第四个字符后添加空格
答案 0 :(得分:3)
这就是您想要的:不幸的是,它无法以您想要的方式完成。但这可以使用 substring 完成。
public static void main(String args[]){
String match = "(^[A-Z]{2}[0-9]{2}[A-Z]{3}$)";
String input = "YO11YOL";
if (input.matches(match)) {
String out = input.substring(0, 4) + " " + input.substring(4, 7);
System.out.println(out);
}
}
答案 1 :(得分:0)
您可以使用两个capturing groups,并使用placeholders $1
和$2
从字符串替换模式中引用它们:
String result = input.replaceFirst("^([A-Z]{2}[0-9]{2})([A-Z]{3})$", "$1 $2");
请参见regex demo和图表:
请注意,.replaceFirst
就足够了(尽管您可能也使用.replaceAll
),因为预期只有一个替换操作(由于{ {1}}和^
anchors)。