Scala中如何提取正则表达式的部分匹配内容
正则表达式:⽤于匹配字符串是否满⾜某种特定的格式,在编程语⾔中有着⼴泛应⽤。常规使⽤场景为验证字符串的格式是否正确,但是也存在需要通过正则表达式提取字符串中某些特定内容的场景;
实例分析1: 存在某字符串  "Need extract line: Number:2345,String:abcde", 编写正则表达式分别提取出Number 和 String 对应的值;
代码实现:
def main(args: Array[String]): Unit ={
val line =  "Need extract line: Number:12345, String:abcde"
val lineRegex = s""".*Number:(\\d+), String:(\\w+)""".r //使⽤括号将需要抽取的部分包住
val lineRegex(num,str) = line  //使⽤这种⽅式定义提取出的变量
println(s"Number is: ${num}")
println(s"String is: ${str}")正则表达式获取括号内容
}
结果展⽰:
实例分析2: 存在某字符串  "(TomcatLog) [2020-05-11 12:12:12.123] ERROR: java.lang.indexOutOfRangeException", 编写正则表达式分别提取出⼩括号中的⽇志类型,⼤括号中的时间戳,以及ERROR后的异常信息;
代码实现:注意本实例中的原始字符串中的⼩括号以及⼤括号的转义⽅式;
def main(args: Array[String]): Unit ={
val line =  "(TomcatLog) [2020-05-11 12:12:12.123] ERROR: indexOutOfRangeException"
/**
* 使⽤ [] 进⾏⼩括号的原样匹配,
* 使⽤ \\ 进⾏⼤括号的转义, 在使⽤\\d 或者\\w的时候转义的斜杠个数不同,
* 后续会再讨论,暂时这个适⽤于全部匹配的效果。
*
* */
val lineRegex = s"""[(](.*)[)] \\[(.*)\\] ERROR: (.*)""".r
val lineRegex(log,time,error) = line
println(s"Log type is: ${log}")
println(s"Timstamp is: ${time}")
println(s"Error info is: ${error}")
}
结果展⽰:
如有任何问题,欢迎指正讨论,谢谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。