Модел на Regex в модел на клас Case с помощта на Scala

Това трябва да е нещо глупаво, но се чудя дали някой може да ми помогне тук. Следното съвпадение на образец на регулярен израз в рамките на съвпадение на клас случай не работи, както бих очаквал. Може ли някой да даде някаква представа? Благодаря.

object Confused {

  case class MyCaseClass(s: String)

  val WS = """\s*""".r

  def matcher(myCaseClass: MyCaseClass) = myCaseClass match {
    case MyCaseClass(WS(_)) => println("Found WS")
    case MyCaseClass(s) => println(s"Found >>$s<<")
  }

  def main(args: Array[String]): Unit = {
    val ws = " "

    matcher(MyCaseClass(ws))
  }
}

Бих очаквал първият случай в съвпадението на шаблона да е този, който съвпада, но не е така.

Това се отпечатва

Намерено >> ‹‹


person Bill Barrington    schedule 31.08.2015    source източник


Отговори (1)


Трябва да бъде:

val WS = """(\s*)""".r

За вашия въпрос, искате да съпоставите шаблон от интервали, В Scala,

Регулярният израз се използва, за да се определи дали даден низ съвпада с модел и, ако е така, за извличане или трансформиране на частите, които съвпадат.

за извличане на съвпадащи части трябва да използваме group за шаблон на низ. Това означава, че трябва да използваме parentheses около нашия низ с шаблон.

Пример:

val date = """(\d\d\d\d)-(\d\d)-(\d\d)""".r
"2004-01-20" match {
  case date(year, month, day) => s"$year was a good year for PLs."
}
person chengpohi    schedule 31.08.2015
comment
Въпреки че този код може да отговори на въпроса, предоставянето на допълнителен контекст относно защо и/или как този код отговаря на въпроса подобрява неговата дългосрочна стойност. - person NathanOliver; 31.08.2015
comment
@NathanOliver, Благодаря, добавих подробности за обяснение. - person chengpohi; 31.08.2015