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

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

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

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

方法findFirstIn能够匹配到第一个符合正则表达式规则的字符串,没有匹配到任何结果的状况下返回Noneui

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来使用。若是没有匹配到任何符合规则的字符换那么,它将返回一个空Iteratores5

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

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

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

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方法。get

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

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

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

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

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
相关文章
相关标签/搜索