scala中正则表达式的拓展应用

17 阅读1分钟

replaceAllin正则替换

功能:对目标字符中的内容,进行正则查找,对找到的内容使用指定的内容进行替换,并返回替换之后的字符串。

格式:正则.replaceAll(目标字符串, 匹配到的内容 => 要替换的内容 )

例子:把目标字符串中的字符BC换成01。

示例

("bc".r).replaceAll("abcdabcd", m => "01" )

(四)手机号打码

先新建一个.txt文件录入个人信息以及所需字符串手机号

任务:把手机号的中间4-7位打马赛克,再输出。

用到的方法是:正则匹配分组 + replaceAllIn。

参考代码:

def main(args: Array[String]): Unit = {
  val content = scala.io.Source.fromFile("address.txt").mkString
  println(content)
  val reg = "(1[3-9]\d{1})(\d{4})(\d{4})".r
  reg.findAllIn(content).foreach(println)
  //val re = reg.replaceAllIn(content,"****")

方法二:通过分组group方法

package reg

object Demo04 {
  def main(args: Array[String]): Unit = {
    val content = scala.io.Source.fromFile("address.txt").mkString
    println(content)
    val reg = "(1[3-9]\d{1})(\d{4})(\d{4})".r
    reg.findAllIn(content).foreach(println)
    //val re = reg.replaceAllIn(content,"*****")
    //repalceAllIn =>全部替换
    val newcontend = reg.replaceAllIn(content , old =>{
      println(old.group(0))
      //group(0) => 正则匹配到的完整内容
      println(old.group(1))
      //group(*) => 正则匹配到的第*个括号的内容
      println(old.group(2))
      println(old.group(3))
      old.group(1) + "****" + old.group(3)
    })
    println(newcontend)
  }
}

更改后的内容可通过filewriter方法打印保存到新建的文件中

val fileWriter = new FileWriter("newaddress.txt")
fileWriter.write(newcontend)
fileWriter.close()

输出结果: image.png