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?)

通过 Java 正则表达式提取 semver 版本字符串的片段

怎样在scala正则表达式提取器中使用小括号

Scala快速入门--正则对象

Scala之option类型及偏函数使用异常处理正则表达式

Scala正则和抽取器:解析方法参数