今天在项目中用到了Scala正则表达式,网上找了好久也没找到很全的资料,这里收集了Scala中很多常用的正则表达式使用方法。关于Scala正则表达式替换请参见:《Scala正则表达式替换》
scala> val regex="""([0-9]+) ([a-z]+)""".r regex: scala.util.matching.Regex = ([0-9]+) ([a-z]+) scala> val line = "123 iteblog" line: String = 123 iteblog scala> val regex(num, blog) = line num: String = 123 blog: String = iteblog
这里将匹配出来的结果复制给num和blog变量。在构造Regex的时候使用到String类的r方法,我们也可以直接使用Regex类进行:
/** * User: 过往记忆 * Date: 15-01-04 * Time: 上午10:16 * bolg: * 本文地址:/archives/1245 * 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货 * 过往记忆博客微信公共帐号:iteblog_hadoop */ scala> import scala.util.matching._ import scala.util.matching._ scala> val regex = new Regex("""([0-9]+) ([a-z]+)""") regex: scala.util.matching.Regex = ([0-9]+) ([a-z]+) scala> val regex(num, blog) = line num: String = 123 blog: String = iteblog
输出的结果和上面一样,其实第一种方法更简洁。我们还可以在case中使用正则:
scala> line match{ | case regex(num, blog) => println(num + "\t" + blog) | case _ => println("ohh...") | } 123 iteblog
如果没有匹配到,则输出ohh。我们还可以使用 Regex
类的findAllIn
、findAllMatchIn
、findFirstIn
、findFirstMatchIn
、findPrefixMatchOf
和 findPrefixOf
方法:
scala> val m = regex.findAllIn(line) m: scala.util.matching.Regex.MatchIterator = non-empty iterator scala> println(m.group(1) + "\t" + m.group(2)) 123 wyp scala> m.toArray res13: Array[String] = Array(123 wyp, 456 iteblog) scala> for(regex(num, blog) <- regex.findAllIn(line)) | println(num + "\t" + blog) 123 wyp 456 iteblog
findAllIn
方法找到line中所有符合正则的字符串,可以通过 toArray
方法来将匹配到的结果存放到 Array
中。也可以方法哦for循环中,遍历出符合条件的匹配。findFirstIn
只匹配第一个符合正则的字符串就停止了:
scala> val m = regex.findFirstIn(line) m: Option[String] = Some(123 wyp)
其他函数这里就不一一介绍了,大家可以 自己动手试试。
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Scala正则表达式】(https://www.iteblog.com/archives/1245.html)