首页 > 解决方案 > 如何清理和打印 \d{3} \d{3} \d{2} \d{2} 格式的数字

问题描述

使用正则表达式,我需要格式化一个字符串,其中包含数字、字母 az 和 AZ,同时还包含破折号和空格。

从用户输入我有 02-219 8 53 24

输出应该是 022 198 53 24

我正在使用正则表达式

[^A-Za-z0-9\\s.]

和java

String abc = "02-219 8 53 24";
String hello = abc.replaceAll("[^A-Za-z0-9\\s.]", " ");
System.out.println(hello.replaceAll("(\\S\\d{3})", ""));

导致 02 219 8 53 24

标签: javaregexstring

解决方案


您可以使用

.replaceAll("\\D+", "").replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4")

.replaceAll("\\D+", "")部分删除所有非数字字符(因此,有问题的字符串变为 0221985324),第二replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4")部分将数字分成组并在它们之间插入空格。请参阅此第 2 步的正则表达式演示

Java 演示

String abc = "02-219 8 53 24";
String hello = abc.replaceAll("\\D+", "");
System.out.println(hello.replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4"));
// => 022 198 53 24

推荐阅读