Группа получения Scala, использующая regex

Скажем, у меня есть этот код:

val string = "one493two483three"
val pattern = """two(\d+)three""".r
pattern.findAllIn(string).foreach(println)

Я ожидал findAllIn только возвратиться 483, но вместо этого, это возвратилось two483three. Я знаю, что мог использовать unapply для извлечения только, что часть, но у меня должен был бы быть шаблон для всей строки, чего-то как:

 val pattern = """one.*two(\d+)three""".r
 val pattern(aMatch) = string
 println(aMatch) // prints 483

Есть ли другой способ достигнуть этого, не используя классы от java.util непосредственно, и без использования не применяются?

63
задан polygenelubricants 17 June 2010 в 15:13
поделиться

2 ответа

Вот пример того, как вы можете получить доступ к группе (1) каждого совпадения:

val string = "one493two483three"
val pattern = """two(\d+)three""".r
pattern.findAllIn(string).matchData foreach {
   m => println(m.group(1))
}

Это напечатает «483» (, как показано на ideone.com ).


Опция поиска

В зависимости от сложности шаблона вы также можете использовать поиск, чтобы только соответствовал нужной части. Это будет выглядеть примерно так:

val string = "one493two483three"
val pattern = """(?<=two)\d+(?=three)""".r
pattern.findAllIn(string).foreach(println)

Вышеупомянутое также печатает «483» (, как показано на ideone.com ).

Ссылки

93
ответ дан 24 November 2019 в 16:14
поделиться

Вы хотите посмотреть на группу (1) , в настоящее время вы смотрите на группу (0) , которая представляет собой «всю согласованную строку».

См. это руководство по регулярным выражениям .

14
ответ дан 24 November 2019 в 16:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: