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
相关产品推荐
相关产品推荐

