欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

Scala正则表达式

今天在项目中用到了Scala正则表达式,网上找了好久也没找到很全的资料,这里收集了Scala中很多常用的正则表达式使用方法。关于Scala正则表达式替换请参见:《Scala正则表达式替换》

Scala Regex Match
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
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 findAllMatchInfindFirstInfindFirstMatchInfindPrefixMatchOffindPrefixOf 方法:

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)
喜欢 (27)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!