我有一个字符串:+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("]")
,我认为这不是最佳选择。
如何为这样的转换编写正则表达式来替换一个(如果不可能,则替换两个)?
答案 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
的块
[...]
详细信息
.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