regex - 用于替换除空白和指定目标之外的所有内容的正则表达式 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
解决方案
您可以使用
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
.
推荐阅读
- ruby-on-rails - 在本机反应中呈现 JSON 数据
- php - 选择喜欢但作为分隔符之间的整个字符串
- javascript - 在 puppeteer 中使用提示符
- amazon-web-services - 如何定义将接受任何给定值的 Lex 插槽类型(自定义/内置)?
- java - 如何使用 Java 代码创建 Kafka 分区
- db2 - DB2 select row isolation not working
- javascript - 内部错误 NodeJS
- macos - 如何检查应用程序是否是钥匙串条目 ACL 的一部分?
- objective-c - 在 NSObject 类中实现时未调用 IOS GCDAsyncSocket didReadData
- java - 在 JavaFX 中显示变量的值