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
相關文章
相關標籤/搜索