Используйте соответствующий шаблон, используя регулярное выражение Extractor
val regex = ".*/(\\d{4}-\\d{2}-\\d{2}).txt".r //remove/after .* if you think its not needed.
str match {
case regex(date) => Some(date)
case _ => None
}
Использование выше кода вместо ниже, потому что ниже один вызовет ошибку совпадения во время выполнения.
val regex(a) = "basedir/somedir/tmp/BLAH/2015-01-01.txt"
Вместо .*
перед регулярным выражением. Вы можете использовать unanchored
.
val regex = "(\\d{4}-\\d{2}-\\d{2}).txt".r.unanchored
Скала РЕПЛ
scala> val regex = "(\\d{4}-\\d{2}-\\d{2}).txt".r.unanchored
regex: scala.util.matching.UnanchoredRegex = (\d{4}-\d{2}-\d{2}).txt
scala> val regex(a) = "basedir/somedir/tmp/BLAH/2015-01-01.txt"
a: String = 2015-01-01
Скала РЕПЛ
scala> val regex = ".*/(\\d{4}-\\d{2}-\\d{2}).txt".r
regex: scala.util.matching.Regex = .*/(\d{4}-\d{2}-\d{2}).txt
scala> val regex(a) = "basedir/somedir/tmp/BLAH/2015-01-01.txt"
a: String = 2015-01-01
Скала РЕПЛ
scala> val str = "basedir/somedir/tmp/BLAH/2015-01-01.txt"
str: String = basedir/somedir/tmp/BLAH/2015-01-01.txt
scala> val regex = ".*/(\\d{4}-\\d{2}-\\d{2}).txt".r
regex: scala.util.matching.Regex = .*/(\d{4}-\d{2}-\d{2}).txt
scala>
| str match {
| case regex(date) => Some(date)
| case _ => None
| }
res21: Option[String] = Some(2015-01-01)
Если вы хотите, чтобы соответствовать каталог, а затем
scala val regex = ".*/(.*)/(\\d{4}-\\d{2}-\\d{2}).txt".r
regex: scala.util.matching.Regex = .*/(.*)/(\d{4}-\d{2}-\d{2}).txt
scala> val s = "basedir/somedir/tmp/BLAH/2015-01-01.txt"
s: String = "basedir/somedir/tmp/BLAH/2015-01-01.txt"
scala> val regex(dir, date) = s
dir: String = "BLAH"
date: String = "2015-01-01"
Что делать, если я также хочу извлечь каталог, в котором находится файл «YYYY-MM-dd.txt»? Итак, скажем, я хочу извлечь («BLAH», «2015-01-01») в качестве кортежа вместо «2015-01-01»? Спасибо. –
@ Darth.Vader отредактировал ответ и добавил, что хотите, чтобы вы посмотрите в конце. Посмотрите – pamu
@ Darth.Vader в основном меняет регулярное выражение, чтобы включить dir также – pamu