0

次の形式の文字列を解析するために正規表現を使用しようとしています。

「a=10:30:00: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

編集

正規表現に基づいて正規表現を変更し、 key=value のコンマ区切りリストに一致するようにしました。値には、処理するコンマを含めることができます。

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)
4

1 に答える 1

0
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
于 2013-03-30T15:08:56.733 に答える