¿Hay una manera simple de devolver las coincidencias de expresiones regulares como una matriz?
Así es como estoy tratando de 2.7.7
:Scala regexps: cómo devolver coincidencias como una matriz o una lista
val s = """6 1 2"""
val re = """(\d+)\s(\d+)\s(\d+)""".r
for (m <- re.findAllIn (s)) println (m) // prints "6 1 2"
re.findAllIn (s).toList.length // 3? No! It returns 1!
Pero entonces me trataron:
s match {
case re (m1, m2, m3) => println (m1)
}
y esto funciona bien! m1 es 6, m2 es 1, etc.
Entonces me encontré con algo que añade a mi confusión:
val mit = re.findAllIn (s)
println (mit.toString)
println (mit.length)
println (mit.toString)
que imprime:
non-empty iterator
1
empty iterator
La llamada "longitud" de alguna manera modifica el estado del iterador. ¿Que esta pasando aqui?
Tu llamada a findAllIn (s) está haciendo coincidir toda la cadena, por lo que la lista resultante no es List (6 1 2), pero realmente es List ("6 1 2") de longitud 1 –