Scala正则表达式格式匹配结果

时间:2014-04-25 21:19:27

标签: regex scala

我写了一个函数

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"。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

将其他答案组合为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}

答案 2 :(得分:0)

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

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