【问题标题】:Scala regex format match resultScala 正则表达式格式匹配结果
【发布时间】:2014-04-26 08:06:02
【问题描述】:

我写了一个函数

def extractMobileNumber : List[String] = {
  pattern.findAllIn(s).toList
}

在哪里

val pattern = "[0-9]{9}".r

返回 List[Int]
例如 输入“女士,请致电 111111111 和固定电话 223322 联系我”
输出:列表[111111111]

由于我正在学习 scala,我无法弄清楚如何使用 pattern.replaceAllIn(s, matcher) 返回“女士,请致电 111-111-111 和固定电话 223322 联系我”。

【问题讨论】:

    标签: regex scala


    【解决方案1】:
      val input = "madam please call me at 111111111 and landline at 223322" :: Nil
    
      val phoneNumber = "(.+)([0-9]{3})([0-9]{3})([0-9]{3})(.+)".r
    
      val processed = input.map {
        case phoneNumber(prefix, p1, p2, p3, suffix) => s"$prefix$p1-$p2-$p3$suffix"
        case s => s
      }
    
      processed.foreach(println)
    

    输出:

    madam please call me at 111-111-111 and landline at 223322
    

    【讨论】:

      【解决方案2】:

      在 API 中结合其他答案作为练习:

      scala> import util.matching._
      import util.matching._
      
      scala> val s = "madam please call me at 111111111 and landline at 223322" 
      s: String = madam please call me at 111111111 and landline at 223322
      
      scala> val r = "[0-9]{9}".r
      r: scala.util.matching.Regex = [0-9]{9}
      
      scala> val m = r findFirstMatchIn s
      m: Option[scala.util.matching.Regex.Match] = Some(111111111)
      
      scala> m map (m => s"""${m.before}${m.matched grouped 3 mkString "-"}${m.after}""")
      res0: Option[String] = Some(madam please call me at 111-111-111 and landline at 223322)
      
      scala> import Regex._
      import Regex._
      
      scala> def f(m: Match) = m.matched grouped 3 mkString "-"
      f: (m: scala.util.matching.Regex.Match)String
      
      scala> r replaceAllIn (s, f _)
      res1: String = madam please call me at 111-111-111 and landline at 223322
      

      这就是 OP 所要求的。

      刚刚注意到 char 类:

      scala> val r = """\d{9}""".r
      r: scala.util.matching.Regex = \d{9}
      

      【讨论】:

        【解决方案3】:

        这是一种不使用正则表达式的方法。将字符串按 3 分组,然后创建一个新的字符串,并在各部分之间添加 -

        scala> "111111111".grouped(3).mkString("-")
        res18: String = 111-111-111
        

        【讨论】:

        • 感谢您的回复,但是,@Eugene 解决方案对我正在试验的内容(正则表达式)关闭。但是,您 sol 代表了字符串格式化的优雅方法。简洁明了
        猜你喜欢
        • 2016-11-10
        • 2015-07-06
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 2022-12-11
        • 2016-11-07
        • 2022-12-09
        • 1970-01-01
        相关资源
        最近更新 更多