сопоставление строки с регулярным выражением scala - PullRequest
0 голосов
/ 29 ноября 2018

Я написал следующую функцию:

import scala.util.matching.Regex
val COL1 = "COL1"
val COL2 = "COL2"
val COL3 = "COL3"
val COL4 = "COL4"
val COL5 = "COL5"
val reg = ".+-([\w\d]{3})-([\d\w]{3})-([\d\w]{3})-([\w]+)$-([\w]+)".r.unanchored
val dataExtraction: String => Map[String, String] = {
  string: String => {
    string match {
      case reg(col1, col2, col3, col4, col5) =>
                 Map(COL1 -> col1, COL2 -> col2, COL3 -> col3, COL4 -> col4 ,COL5 -> col5 )
      case _  => Map(COL1 -> "", COL2 -> "", COL3 -> "", COL4 -> "" ,COL5 -> "" )
    }
  }
}

она должна анализировать строки типа "dep-gll-cde3-l4-result" или "cde3-gll-dep-l4-result"

любая идея, как определить регулярное выражение, разбирающее оба этих

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете использовать следующее регулярное выражение:

val reg = """(\w{3,4})-(\w{3})-(\w{3,4})-(\w+)-(\w+)""".r

Вам не нужно делать его незанятым, так как этот шаблон соответствует всем вашим входам.

Обратите внимание, что внутри строкового литерала в тройных кавычках вы можете определитьобратные косые черты с одним \, в вашем случае их нужно удвоить.Также см. Квантификаторы {3,4}, которые кажутся достаточными для указанных случаев.

См. Онлайн-демонстрацию Scala и демонстрацию регулярных выражений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...