如何在scala中的json文件中为特定模式创建正则表达式模式

时间:2019-03-17 02:05:04

标签: regex scala

我正在尝试创建一个正则表达式模式以匹配Json文件中的模式。 Json文件包含以下几种模式: 例子

  • “raw”: “”\\""

  • “raw”: “true”

  • “raw”: “”’""

raw属性可以在双引号之间具有任何类型的值。我要匹配所有这样的模式,并在该位置用相同长度的“ *”替换。

我创建了一个模式“”"“raw”:(".*")""".r,该模式在编辑器中可以正常工作,但在scala中不能正常工作,并且在原始之后给出完整的字符串。

我该如何实现?

1 个答案:

答案 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值。