2015-01-19 5 views
1

Я ожидаю, что регулярное выражение "[a-zA-Z]\\d{6}", чтобы соответствовать "z999999" но не соответствует, как пустой список отображается:Regex не соответствует

val lines = List("z999999");      //> lines : List[String] = List(z999999) 

val regex = """[a-zA-Z]\d{6}""".r     //> regex : scala.util.matching.Regex = [a-zA-Z]\d{6} 

val fi = lines.map(line => line match { case regex(group) => group case _ => "" }) 
                //> fi : List[String] = List("") 

Есть ли проблема с моим регулярным выражением или, как я использую его с Scala?

+0

@Avinash Радж спасибо, но тот же результат –

+0

@AvinashRaj ив обновляются в соответствии с предложением, но тот же результат –

+0

Вы дон 't нужно, чтобы ';' после 'List (" z999999 ")' – Squidly

ответ

4
val l="z999999" 
val regex = """[a-zA-Z]\d{6}""".r 

regex.findAllIn(l).toList 
res1: List[String] = List(z999999) 

Регулярное выражение кажется действительным.

lines.map(_ match { case regex(group) => group; case _ => "" }) 
res2: List[String] = List("") 

Как странно. Посмотрим, что произойдет с группой захвата вокруг всего выражения, которое мы определили в regex.

val regex2= """([a-zA-Z]\d{6})""".r 
regex2: scala.util.matching.Regex = ([a-zA-Z]\d{6}) 
lines.map(_ match { case regex2(group) => group; case _ => "" }) 
res3: List[String] = List(z999999) 

Huzzah.

Метод unapply в регулярном выражении предназначен для получения результатов захвата групп.

Есть и другие методы объекта регулярных выражений, которые просто получить матчи (например findAllIn, findFirstIn и т.д.)

Смежные вопросы