有一些字符串:
111/aaa
111/aaa|222/bbb
它们的表达形式为:
(.*)/(.*)(|(.*)/(.*))?
我试图用它来匹配一个字符串并提取值:
var rrr = """(.*)/(.*)(|(.*)/(.*))?""".r
"123/aaa|444/bbb" match {
case rrr(pid,pname, cid,cname) => println(s"$pid, $pname, $cid, $cname")
case _ => println("not matched ?!")
}
但它打印:
not matched ?!
我想得到:
123, aaa, 444, bbb
如何解决?
更新
感谢@BartKiers 和@Barmar 的分析器,我发现我的正则表达式有几个错误,终于找到了这个解决方案:
var rrr = """(.*?)/(.*?)([|](.*?)/(.*?))?""".r
"123/aaa|444/bbb" match {
case rrr(pid,pname, _, cid,cname) => println(s"$pid, $pname, $cid, $cname")
case _ => println("not matched ?!")
}
它有效,但你可以看到有一个_
实际上没有用。有什么方法可以重新定义我可以写的正则表达式rrr(pid,pname,cid,cname)
来匹配它?