我的目标是以优雅的方式将多个正则表达式模式匹配到同一个字符串。我理解有必要为这种类型的正则表达式匹配使用组,并且为了使用下面的匹配功能,我需要在case SomePattern(_,_)
语句中明确地捕获每个组(例如,两个组,将需要_
语句中的两个case
。
import scala.util.matching.UnanchoredRegex
val regexPattern1 = "(Some)|(Pattern)".r.unanchored
val regexPattern2 = "(That)|(Other)|(pattern)".r.unanchored
val regexPattern3 = "(A)|(Whole)|(Different)|(One)".r.unanchored
"Some string to match patterns against" match {
case regexPattern1(_,_) => 1
case regexPattern2(_,_,_) => 2
case regexPattern3(_,_,_,_) => 3
}
现在,我有以下注意事项:
UnanchoredRegex
对象,而不是将它们视为
相同正则表达式模式中的不同捕获组。 case SomePattern(_,_,...n)
语句中的捕获组的数量。如果我没有做到这一点,那么模式当然会无声地失败。这使得更新或调整我的模式以及随后调试正则表达式匹配变得很烦人。现在,对于我的问题:有没有办法保留上面的语法,省略(对我的目的)无用的_,_,_,...
部分,匹配任何第一次点击?
答案 0 :(得分:2)
Regex
类实现与unapplySeq
的匹配。这意味着,您可以忽略具有_*
模式的每个组:
"Some string to match patterns against" match {
case regexPattern1(_*) => 1
case regexPattern2(_*) => 2
case regexPattern3(_*) => 3
}