我正在尝试用 * 替换字符串中的所有数字。
现在我有这个
val regex = "^[\\d+].{8}"
val pattern = Pattern.compile(regex)
code = code.replace(pattern.toRegex(), "*** *** *")
它有点管用,但我想要 *
而不是 "*** *** *"
所以想法是替换单个数字而不是 block 。
示例字符串:
123 456 789 0
最佳答案
一种可读的正则表达式方法是匹配从字符串开头到第 8 位的任意数量的字符,然后将匹配传递给一个 block 并用数字模式替换第二次:
val s = "123 456 789 0"
val regex = """^(?:\D*\d){8}""".toRegex()
println(s.replace(regex) { it.value.replace(Regex("""\d"""), "*") })
// => *** *** **9 0
^(?:\D*\d){8}
正则表达式匹配
^
- 字符串开始(?:\D*\d){8}
- 重复 8 次:\D*
- 0 个或多个数字以外的字符\d
- 一个数字。
仅供引用,您可以使用具有八个捕获组的硬编码版本实现相同的效果,s.replace("""^(\D*)\d(\D*)\d(\D*)\d(\D*)\d(\D*)\d(\D*)\d(\D*)\d(\D*)\d""".toRegex(), "$1*$2* $3*$4*$5*$6*$7*$8*")
如果输入字符串中始终有 8 位数字。
关于android - 选择字符串中的前 X 位数字并将每个数字替换为 Character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55265028/