我正在尝试创建一个正则表达式模式以匹配Json文件中的模式。 Json文件包含以下几种模式: 例子
“raw”: “”\\""
“raw”: “true”
“raw”: “”’""
raw属性可以在双引号之间具有任何类型的值。我要匹配所有这样的模式,并在该位置用相同长度的“ *”替换。
我创建了一个模式“”"“raw”:(".*")""".r
,该模式在编辑器中可以正常工作,但在scala中不能正常工作,并且在原始之后给出完整的字符串。
我该如何实现?
答案 0 :(得分:0)
用与模式部分相同的长度的星号替换匹配模式的一部分,您可以使用a solution like
val s = "Text here, \"raw\": \"Remove\" and here"
val rx = "(\"raw\":\\s*\")([^\"]+)(\")".r
val res = rx.replaceAllIn(s, m => m.group(1) + ("*" * m.group(2).length) + m.group(3))
println( res ) // => Text here, "raw": "******" and here
正则表达式为
(\"raw\":\\s*\")([^\"]+)(\")
|___ Group1 ___||_ G2 _||G3|
它匹配并捕获到组1中(由于捕获括号)"raw":
,然后捕获0+个空格(带有\s*
),然后将除{{之外的任何一个或多个chars捕获到组2中。 1}},然后在第3组中将双引号引起来。
借助"
,您可以将匹配数据传递到lambda表达式中,在该表达式中您可以在替换发生之前操纵匹配。因此,ReplaceAllIn
是匹配对象,m
是组1值,m.group(1)
是组2值的长度,并且m.group(2).length
在这里保存着m.group(3)
字符,组3值。