scala正则表达式
Posted chxyshaodiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala正则表达式相关的知识,希望对你有一定的参考价值。
常用语法规则
^ 匹配输入字符串开始的位置。
$ 结尾
. 匹配除" "之外的任何单个字符。
[] 字符记
[^] 反向字符集
re* 前面的字符出现零次或多次,类似Java中的*;
re+ 一次或多次,类似Java中的+;
re? 零次或一次;
re[n] n次
re[n,] 至少n次
re[n,m] n到m次
\w 匹配字母或数字或下划线或汉字
\W 非
\d \D 同上,匹配数组
\s \S 同上,匹配任意空白符
注意:在 Java 和 Scala 中字符串中的反斜线是转义字符。所以如果你要输出 ..,你需要在字符串中写成 .\. 来获取一个反斜线
基本的使用
def main(args: Array[String]): Unit = { //创建regex对象 val pattern : Regex = "Scala".r val str = "Scala is Scalable and cool" //得到option对象 val maybeString: Option[String] = pattern.findFirstIn(str) println(maybeString) }
实例中使用 String 类的 r() 方法构造了一个Regex对象。
然后使用 findFirstIn 方法找到首个匹配项。
如果需要查看所有的匹配项可以使用 findAllIn 方法。
你可以使用 mkString( ) 方法来连接正则表达式匹配结果的字符串,并可以使用管道(|)来设置不同的模式:
def main(args: Array[String]) { val pattern = new Regex("(S|s)cala") // 首字母可以是大写 S 或小写 s val str = "Scala is scalable and cool" println((pattern findAllIn str).mkString(",")) // 使用逗号 , 连接返回结果 }
输出:Scala,scala
如果你需要将匹配的文本替换为指定的关键词,可以使用 replaceFirstIn( ) 方法来替换第一个匹配项,使用 replaceAllIn( ) 方法替换所有匹配项,实例如下:
def main(args: Array[String]) { val pattern = "(S|s)cala".r val str = "Scala is scalable and cool" println(pattern replaceFirstIn(str, "Java")) }
输出:Java is scalable and cool
匹配邮箱格式
要求如下:开头必须是字母,出现一次或多次;后面可以出现数字;@后面字母或数字的组合至少出现一次,搭配.号可以出现一次到三次;结尾必须是字符。
def main(args: Array[String]): Unit = { //由regex得到pattern,由pattern得到matcher,由matcher给出判断。 val regex = "^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z]{1,}$".r; val pattern: Pattern = regex.pattern val input = "abc@com.cn."; val matcher: Matcher = pattern.matcher(input) println(matcher.matches()) }
经测试,input为指定的格式时输出true,否则输出false;
以上是关于scala正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
PySpark UDF 优化挑战使用带有正则表达式的字典(Scala?)