【发布时间】:2021-08-05 11:24:10
【问题描述】:
我有这段代码用于提取正则表达式中重复的 : 分隔部分,这并没有给我正确的输出。
val pattern = """([a-zA-Z]+)(:([a-zA-Z]+))*""".r
for (p <- pattern findAllIn "it:is:very:great just:because:it is") p match {
case pattern("it", pattern(is, pattern(very, great))) => println("it: "+ is + very+ great)
case pattern(it, _,rest) => println( it+" : "+ rest)
case pattern(it, is, very, great) => println(it +" : "+ is +" : "+ very +" : " + great)
case _ => println("match failure")
}
我做错了什么?
如何编写一个 case 表达式来提取 : 的每个 pattern 正则表达式的分隔部分?
解决这个问题的正确语法是什么?
如何匹配从正则表达式中提取的未知数量的参数?
在这种情况下打印:
it : is : very : great
just : because : it
is
【问题讨论】:
-
你不能这样重复捕获组,它只会将最后一次捕获的值保存为当前组值。
-
@WiktorStribiżew 谢谢。 this 方法呢?不过,我无法让它工作。
-
也许只是
val results = """\b[a-zA-Z]+(?::[a-zA-Z]+)*\b""".r.findAllIn(text).toList?
标签: regex scala pattern-matching