Scala学习之字符串篇(六):使用正则表达式

原创
2016/12/08 13:51
阅读数 2K

在Scala中你只需要在正则表达式字符串后边加上一个".r"就可以使用正则表达式了。

scala> val numPattern = "[0-9]+".r
numPattern: scala.util.matching.Regex = [0-9]+

下面介绍正则表达式常用的两个匹配方法findFirstInfindAllIn

方法findFirstIn可以匹配到第一个符合正则表达式规则的字符串,没有匹配到任何结果的情况下返回None

scala> val address = "123 Main Street Suite 101"
address: String = 123 Main Street Suite 101

scala> numPattern.findFirstIn(address)
res4: Option[String] = Some(123)

scala> numPattern.findFirstIn("abc")
res5: Option[String] = None

方法findAllIn可以匹配到所有符合正则表达式规则的字符串,返回的结果是一个Iterator。你可以把它转化为一个Array来使用。如果没有匹配到任何符合规则的字符换那么,它将返回一个空Iterator

scala> val matchs = numPattern.findAllIn(address)
matchs: scala.util.matching.Regex.MatchIterator = non-empty iterator

scala> matchs.getClass()
res6: Class[_ <: scala.util.matching.Regex.MatchIterator] = class scala.util.matching.Regex$MatchIterator

scala> matchs.toArray.foreach(println(_))
123
101

scala> val matchs = numPattern.findAllIn("abc")
matchs: scala.util.matching.Regex.MatchIterator = empty iterator

接下来看看如何使用正则表达式来替换字符串。

我们可以调用字符串的replaceAll方法来进行字符换替换,这个方法接收两个参数,第一个是正则表达,第二个是要被替换成的字符串。

scala> "123 Main Street".replaceAll("[0-9]", "x")
res13: String = xxx Main Street

还有一种方式是,提前编译好一个正则表达式,然后调用正则表达式的replaceAllIn方法来进行替换。

scala> regex.replaceAllIn("123 Main Street", "x")
res15: String = xxx Main Street

如果你只想替换第一次出现的位置的字符换,而不是所有匹配的位置,那么你可以使用字符串的replaceFirst或者正则表达式的replaceFirstIn方法。

scala> "123".replaceFirst("[0-9]", "x")
res16: String = x23

scala> "[0-9]".r.replaceFirstIn("123","x")
res20: String = x23

然后我们继续讨论如何使用正则表达式来拆分字符串。

看一看如何使用正则表达式把"100 Bananas"拆分为100何Bananas两部分。

scala> val pattern = "([0-9]+) ([a-zA-Z]+)".r
pattern: scala.util.matching.Regex = ([0-9]+) ([a-zA-Z]+)

scala> val pattern(count, fruit) = "100 Bananas"
count: String = 100
fruit: String = Bananas

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部