正则表达式应用-手机号打码

65 阅读2分钟

(一)matchs方法

正则表达式对象有matches方法,它的作用是验证给定的字符串是否满足正则表达式的要求。它的格式如下:

val 结果 = 正则.matches(目标字符串)

目标:手机号打码 17384756473—> 173****6473

任务:从一个文本文件中(自己准备一个),读出一段内容,把其中的手机号识别出来,并打码

address.txt

湖北省 潜江市 泰丰办事处 青龙沟小区 3栋3单元 范先生 17584934372,17384756473

/**
 * 目标:手机号打码
 *      17384756473—> 173****6473
 * 任务:从一个文本文件中(自己准备一个),读出一段内容,把其中的手机号识别出来,并打码
 * address.txt
 * 湖北省 潜江市 泰丰办事处 青龙沟小区 3栋3单元 范先生 17584934372,17384756473
 */
object reg04 {
    def main(args: Array[String]): Unit = {
      //1.从文本文件中读取内容
        val content = scala.io.Source.fromFile("address.txt").mkString
            println("读入进来的内容是:")
            println(content)
            //2.写一个手机号的正规
            val reg = "1[76473]\d{9}".r
        //匹配输出
            reg.findAllIn(content).foreach(println)

    }

输出内容:

image.png

(二)replaceAllin正则替换

  1. replaceAllIn.,全部替换。
  2. 在content中通过正则去找字符串,找到之后,就换成指定的内容,并把最终的结果保存到newContent
  3. 功能:对目标字符中的内容,进行正则查找,对找到的内容使用指定的内容进行替换,并返回替换之后的字符串。
  4. 格式:正则.replaceAll(目标字符串, 匹配到的内容 => 要替换的内容 )
val newContent = reg.replaceAllIn(content,"这有个手机号")
println("替换之后的内容:")
println(newContent)
val newContent = reg.replaceAllIn(content,m => {
  //println(s"在replaceAllIn函数中,找到的内容是:${mat}")
  //"手机号" + m
  //m 的前三位 + "****" +m的后四位
  m.toString().substring(0,3) + "****" + m.toString().substring(7)
})
  • 使用小括号()分组
  def main(args: Array[String]): Unit = {
      //1.从文本文件中读取内容
        val content = scala.io.Source.fromFile("address.txt").mkString
            println("读入进来的内容是:")
            println(content)
            //2.写一个手机号的正规
            //使用小括号()分组
            val reg = "(1[76473]\d{2})(\d{3})(\d{4})".r
            val newContent = reg.replaceAllIn(content,m => {
             println(m.group(0))//当前正则匹配到完整的内容
              println(m.group(1))//当前正则的第一个分组(第一个小括号)匹配的内容
              println(m.group(2))
              println(m.group(3))
              m.group(1) + "***" + m.group(3)
            })
            println("替换之后的内容是:")
            println(newContent)
    }

}
  • 把替换之后的内容写到一个新文件中
  val fileWriter = new FileWriter("newAddress.txt")
      fileWriter.write(newContent)
      fileWriter.close()
}