Có cách nào đơn giản để trả về các kết quả regex dưới dạng mảng không?
Sau đây là cách tôi đang cố gắng trong 2.7.7
:Scala regexps: cách trả về các kết quả phù hợp dưới dạng mảng hoặc danh sách
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!
Nhưng sau đó tôi đã cố gắng:
s match {
case re (m1, m2, m3) => println (m1)
}
Và điều này hoạt động tốt! m1 là 6, m2 là 1, vv
Sau đó, tôi tìm thấy một cái gì đó thêm vào sự nhầm lẫn của tôi:
val mit = re.findAllIn (s)
println (mit.toString)
println (mit.length)
println (mit.toString)
Đó in:
non-empty iterator
1
empty iterator
"độ dài" cuộc gọi bằng cách nào đó sẽ thay đổi trạng thái của trình lặp. Chuyện gì đang xảy ra ở đây?
Cuộc gọi của bạn để tìmAllIn (s) phù hợp với toàn bộ chuỗi, do đó danh sách kết quả của bạn không phải là Danh sách (6 1 2), nhưng thực sự là Danh sách ("6 1 2") chiều dài 1 –