regex - Scala regexps: how to return matches as array or list -


is there simple way return regex matches array?
here how trying in 2.7.7:

val s = """6 1 2""" val re = """(\d+)\s(\d+)\s(\d+)""".r (m <- re.findallin (s)) println (m) // prints "6 1 2" re.findallin (s).tolist.length // 3? no! returns 1! 

but tried:

s match {   case re (m1, m2, m3) => println (m1) } 

and works fine! m1 6, m2 1, etc.

then found added confusion:

val mit = re.findallin (s) println (mit.tostring) println (mit.length) println (mit.tostring) 

that prints:

non-empty iterator 1 empty iterator 

the "length" call somehow modifies state of iterator. going on here?

ok, first of all, understand findallin returns iterator. iterator consume-once mutable object. change it. read on iterators if not familiar them. if want reusable, convert result of findallin list, , use list.

now, seems want matching groups, not matches. method findallin return matches of full regex can found on string. example:

scala> val s = """6 1 2, 4 1 3""" s: java.lang.string = 6 1 2, 4 1 3  scala> val re = """(\d+)\s(\d+)\s(\d+)""".r re: scala.util.matching.regex = (\d+)\s(\d+)\s(\d+)  scala> for(m <- re.findallin(s)) println(m) 6 1 2 4 1 3 

see there 2 matches, , neither of them include ", " @ middle of string, since that's not part of match.

if want groups, can them this:

scala> val s = """6 1 2""" s: java.lang.string = 6 1 2  scala> re.findfirstmatchin(s) res4: option[scala.util.matching.regex.match] = some(6 1 2)  scala> res4.get.subgroups res5: list[string] = list(6, 1, 2) 

or, using findallin, this:

scala> val s = """6 1 2""" s: java.lang.string = 6 1 2  scala> for(m <- re.findallin(s).matchdata; e <- m.subgroups) println(e) 6 1 2 

the matchdata method make iterator returns match instead of string.


Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -