簡體   English   中英

Scala Regex大小寫匹配有什么問題?

[英]What's wrong with Scala Regex in case match?

我在下面定義了兩個正則表達式doubleRegexintRegex

scala> val doubleRegex = """^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$""".r
doubleRegex: scala.util.matching.Regex = ^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$

scala> val intRegex = """^[-+]?[0-9]*$""".r
intRegex: scala.util.matching.Regex = ^[-+]?[0-9]*$

現在,我想匹配一堆字符串以檢測其類型:

scala> List(".01", "11", "1.34").map{ s => 
       s match {
          case intRegex() => "INT"
          case doubleRegex() => "DOUBLE"
          case _ => "NONE"
       }
     }
res5: List[String] = List(NONE, INT, NONE)

為什么不打印List(DOUBLE, INT, DOUBLE)

您在doubleRegex指定了一個捕獲組,並且在執行時,將提取出捕獲組(第一個捕獲組中的示例為空)。

使用doubleRegex(_*)僅檢查字符串是否匹配,而不提取捕獲組:

val doubleRegex = """^[-+]?[0-9]*[.]?[0-9]+([eE][-+]?[0-9]+)?$""".r
val intRegex = """^[-+]?[0-9]*$""".r
print(List(".01", "11", "1.34").map{ s => 
   s match {
      case intRegex(_*) => "INT"
      case doubleRegex(_*) => "DOUBLE"
      case _ => "NONE"
   }
})

IDEONE演示

另一種解決方案是將捕獲組更改為非捕獲組:

val doubleRegex = """^[-+]?[0-9]*[.]?[0-9]+(?:[eE][-+]?[0-9]+)?$""".r
                                            ^^

然后,您可以使用case intRegex() => "INT"case doubleRegex() => "DOUBLE"

觀看另一個IDEONE演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM