内容:
1、正则表达式代码
2、与模式匹配结合的reg代码实战
与正则表达式相关的类是scala.util.matching.Regex类。要构造一个Regex对象,使用String类的r方法即可(.r)。如果正则表达式中包含反斜杠或引号之类的需要转义的字符,那么最好是使用原始(raw)字符串,以三个”号包围。
| val numPattern = "[0-9]+".r val wsnumwsPattern = """\s+[0-9]+\s+""".r | ||
1 2 3 4 5 6 7 | // findAllIn方法返回遍历所有匹配项的迭代器 for (matchString <- numPattern.findAllIn("99 bottles, 98 bottles"))
// 找到首个匹配项 val m1 = wsnumwsPattern.findFirstIn("99 bottles, 98 bottles") // 返回Some(" 98 ") // findFirstIn方法返回Option[String] |
//以上findAllIn方法为找到匹配的内容并附给matchString
用findPrefixOf方法检查某个字符串的开始部分是否能够匹配。可以用相应的replace方法来替换掉匹配的部分。
分组使得获取正则表达式的子表达式更加方便。在想要提取的子表达式两侧加上圆括号
1 | val numitemPattern = "([0-9]+) ([a-z]+".r |
//匹配组将正则表达式对象当做“提取器”来使用:
1 2 | val numitemPattern(num, item) = "99 bottles" // num被赋值为"99",item被赋值为"bottles" |
println(numberPattern.findFirstIn("99ss java, 222 hadoop"))
val numitemPattern="""([0-9]+) ([a-z]+)""".r
val numitemPattern(num, item) = "99 hadoop"
val line = "93s459 spark"
line match{
case numitemPattern(num, blog) => println(num + "\t" + blog)
case _ => println("Oops...")
}
匹配numitemPattern中的数字和字符串将匹配结果中数字附给num,字符串赋给blog然后打印。