Java匹配正则表达式,然后使用第二个正则表达式格式化字符串

时间:2019-02-27 21:37:38

标签: java regex

我尝试首先将一个字符串与正则表达式模式匹配,然后使用第二个模式来格式化该字符串。据我所读,实现此目标的一种方法是使用.replaceAll() edit .replaceAll()并非用于此目的,请阅读有关答案的评论进行澄清)

我创建了此功能,目的是:

  1. 将给定的字符串匹配到match
  2. 使用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,并在第四个字符后添加空格

2 个答案:

答案 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和图表:

enter image description here

请注意,.replaceFirst就足够了(尽管您可能也使用.replaceAll),因为预期只有一个替换操作(由于{ {1}}和^ anchors)。