一、scala正则表达式-1
Scala支持多种正则表达式解析方式
(1)String.matches()方法
例:
var a = "!123".matches("[a-zA-Z0-9]{4}")
println(a)
结果:false
(2)正则表达式模式匹配
var source = Source.fromFile("D:\\wcl.txt","UTF-8")
var lines = source.getLines.toArray
val reg = """([A-Z]+) ([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}) requestURI:(.*)""".r
lines.filter(_.matches("([A-Z]+) ([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}) requestURI:(.*)"))
lines.map(line=>line match {case reg(le,ld,ad)=>(le,ld,ad) case _ => ""})
结果:res33: Array[java.io.Serializable] = Array((INFO,2000-01-07,/c?app=0&p=1), (INFO,2000-02-07,/c?app=1&p=2), (DEBUG,2002-02-04,/c?app=2&p=3), (INFO,2003-11-14,/c?app=3&p=4), (ERROR,2004-12-07,/c?app=4&p=5))
(3)scala.util.matching.Regex
二、正则表达式-2
scala.util.matching.Regex
(1)findFirstMatchLn()返回第一个匹配(Option【Match】)
(2)findAllMatchLn()返回所有匹配结果(Regex.Match)分组时调用
(3)findAllLn()返回所有匹配结果(String)推荐使用
var reg = "[0-9]".r
var a = reg.findFirstMatchIn("acsddsg12dvs") match {
case Some(_) => println("OK")
case None => println("no")
}
三、正则表达式-3
捕获分组(group,见下方完整案例)
四、正则表达式-4
字符串替换(replaceFirstLn replaceAllLn)
val num = "[0-9]+".r.findAllIn("123 main street suite 2019").foreach(println(_))
"[0-9]+".r.replaceAllIn("123 main street suite 2019","333").foreach(print(_))
五、正则表达式-5
在字符串中查找模式
val date = """([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})""".r
"2014-5-18" match {
case date(_,mon,_*) => println(mon) //_*省略多个
}
六、详细完整案例
var a = "!123".matches("[a-zA-Z0-9]{4}")
println(a)
//正则读有效数据
//read data
var source = Source.fromFile("D:\\test.txt","UTF-8")
var lines = source.getLines().toArray
//regexp \u4e00-\u9fa5
//125;男;2015-9-7 1:52:22;1521.84
val reg = """([0-9]{2,3});([\u4e00-\u9fa5]);([0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2});([0-9]{3,4}.[0-9]{2})""".r
var regStrTest = "([0-9]{2,3});([\u4e00-\u9fa5]);([0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2});([0-9]{3,4}.[0-9]{2})"
var line2 = lines.filter(_.matches(regStrTest))//清理数据
line2.map(line=>line match{case reg(id,sex,date,money)=>(id,money)}).foreach(println(_))
line2.map(line=>reg.findAllMatchIn(line).toList.map(x=>(x.group(1),x.group(2),x.group(3),x.group(4)))).foreach(println(_))
line2.map(line=>reg.findAllMatchIn(line).foreach(x=>println(x.group(1),x.group(2),x.group(3),x.group(4))))
法一结果:

法二结果:

法三结果:

本文详述了Scala中的正则表达式使用,包括String.matches()方法、正则表达式模式匹配、scala.util.matching.Regex类的功能,如findFirstMatchIn()、findAllMatchIn()和replaceAllIn()。此外,还涵盖了捕获分组、字符串替换和在字符串中查找模式的实例应用。
344

被折叠的 条评论
为什么被折叠?



