我写了一个函数
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"。
答案 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