用于电话号码模拟的正则表达式

时间:2018-06-21 07:56:37

标签: java regex kotlin

我有一个字符串:+0 000 000-00-00

我们需要找到所有“边界”零并添加[]符号,例如,输出字符串必须看到以下内容:

+[0] [000] [000]-[00]-[00]

这次,我使用了几个String.replace()函数:

val stringBuilder = StringBuilder(maskFormat
                .replace("+0", "+[0")
                .replace(" 0", " [0")
                .replace("0 ", "0] ")
                .replace("-0", "-[0")
                .replace("0-", "0]-")).append("]") 

,我认为这不是最佳选择。

如何为这样的转换编写正则表达式来替换一个(如果不可能,则替换两个)?

3 个答案:

答案 0 :(得分:4)

您可以仅使用\d+正则表达式来匹配1个以上的数字,并使用{p1}

[...]

请参见Kotlin demo online。替换字符串中的"+0 000 000-00-00".replace(Regex("""\d+"""), "[$0]") // => +[0] [000] [000]-[00]-[00] 是一个占位符,它表示正则表达式引擎找到的整个匹配值。

请参见regex demo

如果您真的打算只用$0包装0的块

[...]

请参见another regex demo

详细信息

  • .replace(Regex("""\b0+\b"""), "[$0]") -单词边界
  • \b-1个以上的0+字符
  • 0-单词边界。

使用\b,您可以将任意1位以上的数字块匹配为一个完整的单词。

答案 1 :(得分:3)

我会用一个简单的"word boundary"包围一系列数字:

\b(\d+)\b -> [$1]

哪种产量:

+0 000 000-00-00 // +[0] [000] [000]-[00]-[00]
+0 867 5309      // +[0] [867] [5309]

答案 2 :(得分:0)

问题与边界0有关,因此此正则表达式应能解决问题:

"+0 000 000-00-00".replaceAll( "([ \\-+])0", "$1[0")  // border left
                  .replaceAll( "0([ \\-+])", "0]$1"); // border right