字符串中正则表达式模式匹配
通过在String上调用.r方法来创建一个scala.util.matching.Regex对象,然后在findFirstIn中使用该模式来查找一个匹配,在findAllIn中使用该模式来查找所有的匹配。
// 使用正则表达式匹配
val numPattern = "[0-9]+".r
val address = "123 Main Street Suite 101"
val match1 = numPattern.findFirstIn(address) // 返回的是一个Option[String]
println(match1.get) // 123
val matches = numPattern.findAllIn(address) // 返回的是一个Option[String]
matches.foreach(println) // 123 101
// 将匹配结果转为Array数组: toArray,toList,toSeq,toVector
val matches2 = numPattern.findAllIn(address).toArray // Array(123, 101)
// 另一种方法
import scala.util.matching.Regex
val numPattern3 = new Regex("[0-9]+")
val address3 = "123 Main Street Suite 101"
val match3 = numPattern.findFirstIn(address)
println(match3) // Some(123)
println(match3.get) // 123
// 处理返回的值:Option/Some/None
val result5 = numPattern3.findFirstIn(address3).getOrElse("no match")
println(result5) // 123
// 因为一个Option是零个或一个元素的集合
numPattern3.findFirstIn(address3).foreach { e => println(e)} // 123
numPattern3.findFirstIn(address3).foreach(println) // 123
// 还可以这样处理:使用模式匹配
match1 match {
case Some(s) => println(s"发现: $s") // 123
case None => println("什么也没找到")
}
提取与正则表达式相匹配的部分(一个或多个)
提取与正则表达式相匹配的部分(一个或多个),使用group。
val pattern9 = "([0-9]+) ([A-Za-z]+)".r
下面的代码从给定的字符串提取数值字段和字母字段作为两个变量: count和fruit。
val pattern9(count, fruit) = "100 Bananas"
println(count,fruit)
val datePattern = """(\d\d\d\d)-(\d\d)-(\d\d)""".r
val dates = "历史上重要的时刻: 2004-01-20, 1958-09-05, 2010-10-06, 2011-07-15"
val firstDate = datePattern findFirstIn dates getOrElse "No date found."
val firstYear = for (m <- datePattern findFirstMatchIn dates) yield m group 1
字符串拆分
可以使用split方法对字符串按指定的分割符进行分割。请看下面的示例代码:
"hello world".split(" ")
"hello world".split(" ").foreach(println)
val s33 = "鸡蛋, 牛奶, 面包, 可口 可乐"
s33.split(",") // 返回一个数组
s33.split(",").map(_.trim).foreach(println)
// 基于正则表达式拆分(按逗号或空格分割)
"hello world,this is Al".split(",|\\s+").foreach(println)
字符串替换
在字符串上调用replaceAll方法执行一个替换,返回一个新的字符串。
// 字符串替换
val address6 = "123 Main Street".replaceAll("[0-9]", "x")
println(address6) // xxx Main Street
// 也可以先定义一个正则表达式,然后执行replaceAllIn方法
val regex = "[0-9]".r
val newAddress = regex.replaceAllIn("123 Main Street", "x")
println(newAddress) // xxx Main Street
// 只替换第一个匹配到的
val result7 = "123".replaceFirst("[0-9]", "x")
println(result7) // x23
// 还可以在Regex上调用replaceFirstIn
val regex8 = "H".r
val result8 = regex8.replaceFirstIn("Hello Hi world", "J")
println(result8) // Jello Hi world
© 版权声明
本站网络名称:
知趣
本站永久网址:
https://www.qubaa.top
网站侵权说明:
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长删除处理。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END
暂无评论内容