正则表达式 scala:格式匹配和填充



正确的输入格式:xxxx/yyyy/zzzz,即每个部分 4 个字符。 字符串的总长度(不包括"/"(应始终为 12。

输入可以是:xxx/yyy/zzz,然后应该填充它以显示为 0xxx/0yyy/0zzz

在此阶段,至少会出现一个"/"。如果有 2 个部分,那么我们需要 6 个字符。

在 Scala 中寻找带有填充逻辑的正则表达式。

// line to tune: 
val matchThis = raw"(d{4})/(d{4})/(d{4})".r
val valids = List ("1/6", "123456/1", "1/123456", "123456/123456", "1/2/3", "1234/1234/1234", "012/12/3", "1/01/012")
val invalids = List ("/6", "1234567/1", "1/1234567", "1234567/1234567", "/2/3", "1/2/", "12345/1234/1234", "012/12345/3", "1/01/012345")
def tester (input: String) = {
  input match {
      case matchThis(_*) => "It's valid!"
      case _ => "Need some work" /*???*/
  }
}
valids.map (s => tester(s))
invalids.map (s => tester(s))

这不是防弹的,但我认为它涵盖了您所描述的大部分内容。

val valid = raw"(d{1,6})/(d{1,6})(?:/(d{1,4}))?".r
val output = input match {
  case valid(a,b,null) => f"$a%6s/$b%6s"       replaceAll(" ","0")
  case valid(a,b,c)    => f"$a%4s/$b%4s/$c%4s" replaceAll(" ","0")
  case _ => "invalid"
}

更完整一点。

val valid = raw"(d{1,4})/(d{1,4})/(d{1,4})|(d{1,6})/(d{1,6})".r
val output = input match {
  case valid(null,null,null,a,b) => f"$a%6s/$b%6s"       replaceAll(" ","0")
  case valid(a,b,c,null,null)    => f"$a%4s/$b%4s/$c%4s" replaceAll(" ","0")
  case _ => "invalid"
}

最新更新