Scala регулярное выражение получить строку перед первым дефисом и всей строкой - PullRequest
1 голос
/ 14 марта 2019

Учитывая строку типа abab/docId/example-doc1-2019-01-01, я хочу использовать Regex для извлечения этих значений:

firstPart = example
fullString = example-doc1-2019-01-01

У меня есть это:

import scala.util.matching.Regex

case class Read(theString: String) {

  val stringFormat: Regex = """.*\/docId\/([A-Za-z0-9]+)-([A-Za-z0-9-]+)$""".r

  val stringFormat(firstPart, fullString) = theString

}

Но это разделяет это так:

firstPart = example
fullString = doc1-2019-01-01

Есть ли способ сохранить fullString и сделать регулярное выражение, чтобы получить часть до первого дефиса? Я знаю, что могу сделать это с помощью метода String split, но есть ли способ сделать это с помощью регулярных выражений?

1 Ответ

0 голосов
/ 14 марта 2019

Вы можете использовать

val stringFormat: Regex = ".*/docId/(([A-Za-z0-9])+-[A-Za-z0-9-]+)$".r
                                    ||_ Group 2 _|               |
                                    |                            |
                                    |_________________ Group 1 __|

См. Демоверсию regex .

Обратите внимание, как переупорядочены скобки захвата.Кроме того, вам нужно поменять местами переменные в вызове соответствия регулярному выражению, см. Демонстрацию ниже (fullString должен предшествовать firstPart).

См. Scala demo :

val theString = "abab/docId/example-doc1-2019-01-01"
val stringFormat = ".*/docId/(([A-Za-z0-9]+)-[A-Za-z0-9-]+)".r
val stringFormat(fullString, firstPart) = theString
println(s"firstPart: '$firstPart'\nfullString: '$fullString'")

Вывод:

firstPart: 'example'
fullString: 'example-doc1-2019-01-01'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...