正则表达式2

65 阅读1分钟
  1. 从文本文件中读入一些包含手机号的字符串
  2. 把手机号识别出来
  3. 把手机号的中间4位打码,保存到一个新的文本文件中
def main(args: Array[String]): Unit = {
  // 1. 读入文件,项目根目录下address.txt
  val source = scala.io.Source.fromFile("address.txt").mkString
  // println(source)

  // 2. 识别手机号
  val reg = """(1[356789])(\d)(\d{4})(\d{4})""".r

  // 3. 替换
  // group 分组
  // group(0) 匹配到的整个字符串
  // group(1) 匹配到的第1个括号
  // group(2) 匹配到的第2个括号
  // group(3) 匹配到的第3个括号
  val newSource = reg.replaceAllIn(source, m => {
    println(m.group(0))
    println(m.group(1))
    println(m.group(2))
    println(m.group(3))
    m.group(1) + "****" + m.group(3)
    m.toString
  })

  // 4. 输出文件
  val writer = new java.io.PrintWriter("address.new.txt")
  writer.write(newSource)
  writer.close()
}
能匹配很多规则的字符
.匹配除换行外单个字符a.c,文本abc、a&c等a.c可匹配多种,只要中间是一非换行字符
\d等价[0-9],匹配数字\d{3},文本123、456\d{3}匹配连续3个数字
\D等价[^0-9],匹配非数字\D+,文本abc\D+匹配至少一个非数字字符,如abc
\w等价[a-zA-Z0-9_],匹配相关字符\w+,文本abc、abc123、abc_\w+匹配对应字符串
\W等价[^a-zA-Z0-9_],匹配其他\W,文本&\W匹配非字母等字符,如&
\s匹配空白字符a\sb,文本a ba\sb匹配含空白字符串
\S匹配非空白字符\S+,文本abc\S+匹配至少一个非空白字符,如abc