Regex用于键值对,其中可以在值中嵌入分隔符(Scala)



我正在尝试使用正则表达式来解析以下形式的字符串:

"a=10:30:0:b=2:c=3">

以产生

a=10:30:00
b=2
c=3

我最接近的是(\w+(=(\S+?((?=:|$(,但这切断了a:30:00:

a=10
b=2
c=3

代码为scala:

scala> val s = "a=10:20:00:b=2:c=3"
s: java.lang.String = a=10:20:00:b=2:c=3
scala> val R = """(w+)=(S+?)(?=:|$)""".r 
R: scala.util.matching.Regex = (w+)=(S+?)(?=:|$)
scala> R findAllIn s foreach println
a=10
b=2
c=3

编辑

基于修改正则表达式正则表达式匹配逗号分隔的键=值列表,其中值可以包含要处理的逗号:

val s = "foo=bar:baz:r=abc:a=10:20:00:b=2:c=3:s=xx:yy:z=100"
val R = """([^=]+)=([^=]+)(?::|$)""".r
R findAllMatchIn s foreach { x => println(x.subgroups) }
                                              //> List(foo, bar:baz)
                                              //| List(r, abc)
                                              //| List(a, 10:20:00)
                                              //| List(b, 2)
                                              //| List(c, 3)
                                              //| List(s, xx:yy)
                                              //| List(z, 100)
scala> val R = """(w+)=(d+(?::d+)*)""".r
R: scala.util.matching.Regex = (w+)=(d+(?::d+)*)
scala> for(R(key, value) <- R.findAllIn(str)) println(key + "=" + value)
a=10:30:00
b=2
c=3

或者基于您引用的正则表达式:

scala> val R = """([^:=]+)=([^=]+)(?=:|$)""".r
R: scala.util.matching.Regex = (w+)=([^=]+)(?=:|$)
scala> for(R(key, value) <- R.findAllIn(str)) println(key + "=" + value)
a=10:30:00
b=2
c=3

最新更新