首页 > 解决方案 > 用于替换除空白和指定目标之外的所有内容的正则表达式 Scala

问题描述

我的初始代码,但无论长度如何,它都会占用所有数字。我只需要替换一个哈希之前的 5 个连续数字。

val st="ABC  #12345768 213123 Checks juan #54321 asda"
val Replace= "([^\\s|'(#\\[0-9\\]{5})'])".r
val new_value= Replace.replaceAllIn(st, "X")
println(new_value)

预期输出:

XXX  XXXXXXXXX XXXXXX XXXXXX XXXX #54321 XXXX

标签: regexscala

解决方案


您可以使用

val st = "ABC  #12345768 213123 Checks juan #54321 asda"
val Replace = """(#\d{5})(?!\d)|\S""".r
val new_value= Replace replaceAllIn (st, m => if (m.group(1) == null) "X" else m.group(1) )
println(new_value)
// => XXX  XXXXXXXXX XXXXXX XXXXXX XXXX #54321 XXXX

请参阅Scala 演示

细节

  • (#\d{5})(?!\d)- 匹配并捕获到第 1 组一个哈希符号和它后面的 5 个数字,后面没有数字
  • |- 或者
  • \S- 只匹配一个非空白字符。

匹配在回调内部处理:if (m.group(1) == null) "X" else m.group(1)表示如果 Group 1 匹配,则替换为组值(不替换匹配项),否则,将找到的字符替换为X.


推荐阅读