У меня есть входной список строк, который я хотел бы перевести в список объектов с помощью регулярных выражений. В приведенном ниже коде я не создаю объекты, а печатаю их в stdout
для простоты.
Я могу поддерживать некоторые входные строки, но не весь список. Может кто-нибудь поделится, что я делаю не так?
lazy val TIMESTAMP_PATTERN: Regex = """(year|month|day|hour)\(([a-zA-Z_]+)[,]?([a-zA-Z_]*)\)""".r
lazy val BUCKET_PATTERN: Regex = """(bucket)\((.+)(,)(.+)[,]?(.*)\)""".r
Seq(
"year(timestamp)",
"year(timestamp, _MY_YEAR)",
"month(timestamp)",
"month(timestamp, _MY_MONTH)",
"day(timestamp)",
"day(timestamp, _MY_DAY)",
"hour(timestamp)",
"hour(timestamp, _MY_HOUR)",
"bucket(id, 32)",
"bucket(id, 32, _MY_BUCKET)",
).foreach { input => input match {
case TIMESTAMP_PATTERN(transform, sourceColumn, targetColumn) => println(s"$transform ::: $sourceColumn :::- $targetColumn")
case BUCKET_PATTERN(sourceColumn, numBuckets) => println(s"bucket ::: $sourceColumn ::: $numBuckets")
case BUCKET_PATTERN(sourceColumn, numBuckets, targetColumn) => println(s"bucket ::: $sourceColumn ::: $numBuckets ::: $targetColumn")
case z => println(s"Unexpected match: $z")
}
}
Вывод
year ::: timestamp :::-
Unexpected match: year(timestamp, _MY_YEAR)
month ::: timestamp :::-
Unexpected match: month(timestamp, _MY_MONTH)
day ::: timestamp :::-
Unexpected match: day(timestamp, _MY_DAY)
hour ::: timestamp :::-
Unexpected match: hour(timestamp, _MY_HOUR)
Unexpected match: bucket(id, 32)
Unexpected match: bucket(id, 32, _MY_BUCKET)