You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala正则表达式问题:仅保留空格及#后5位连续数字,其余替换为X

嘿,我来帮你搞定这个正则的问题!你的需求是只保留空格和#后跟的正好5位数字,其他所有字符替换成X,对吧?

你原来的正则表达式写得有点问题,语法和逻辑都不对——它没有正确识别#\d{5}(#加5位数字)这个需要保留的序列,反而把很多不该替换的内容也处理了。

我们可以用一个更清晰的正则,把字符串分成「需要保留的部分」和「需要替换的部分」,然后通过模式匹配来处理:

val st = "ABC #12345768 213123 Checks juan #54321 asda"
// 正则匹配:要么是空格,要么是#后跟5位数字;否则匹配单个字符
val pattern = """(\s|#\d{5})|.""".r
val newValue = pattern.replaceAllIn(st, m => {
  // 如果匹配到了保留的部分,直接返回;否则返回X
  m.group(1) match {
    case s: String => s
    case _ => "X"
  }
})
println(newValue)

这个正则的逻辑很直观:

  • (\s|#\d{5}):匹配需要保留的内容——要么是单个空格,要么是#加上正好5位数字的完整序列;
  • |.:匹配任意单个字符(也就是所有不满足保留条件的内容);
  • 在替换函数里,我们检查是否匹配到了保留的组:如果是,直接保留原内容;否则就替换成X。

运行这段代码后,你会得到完全符合预期的输出:

XXX XXXXXXXXX XXXXXX XXXXXX XXXX #54321 XXXX

内容的提问来源于stack exchange,提问作者user7006069

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:01:37