Scala中正则表达式以及与模式匹配结合(多种方式)

 

这篇文章主要介绍了Scala中正则表达式以及与模式匹配结合,本文给大家介绍了多种模式匹配方式,需要的朋友可以参考下

正则表达式

1

2

3

4

//"""原生表达

val regex="""([0-9]+)([a-z]+)""".r

val numPattern="[0-9]+".r

val numberPattern="""\s+[0-9]+\s+""".r

说明:.r()方法简介:Scala中将字符串转换为正则表达式

1

2

3

4

5

/** You can follow a string with `.r`, turning it into a `Regex`. E.g.

*

* `"""A\w*""".r` is the regular expression for identifiers starting with `A`.

*/

def r: Regex = r()

模式匹配一

1

2

3

//findAllIn()方法返回遍历所有匹配项的迭代器

for(matchString <- numPattern.findAllIn("99345 Scala,22298 Spark"))

 println(matchString)

说明:findAllIn(…)函数简介

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

/** Return all non-overlapping matches of this `Regex` in the given character

 * sequence as a [[scala.util.matching.Regex.MatchIterator]],

 * which is a special [[scala.collection.Iterator]] that returns the

 * matched strings but can also be queried for more data about the last match,

 * such as capturing groups and start position.

 *

 * A `MatchIterator` can also be converted into an iterator

 * that returns objects of type [[scala.util.matching.Regex.Match]],

 * such as is normally returned by `findAllMatchIn`.

 *

 * Where potential matches overlap, the first possible match is returned,

 * followed by the next match that follows the input consumed by the

 * first match:

 *

 * {{{

 * val hat = "hat[^a]+".r

 * val hathaway = "hathatthattthatttt"

 * val hats = (hat findAllIn hathaway).toList      // List(hath, hattth)

 * val pos = (hat findAllMatchIn hathaway map (_.start)).toList // List(0, 7)

 * }}}

 *

 * To return overlapping matches, it is possible to formulate a regular expression

 * with lookahead (`?=`) that does not consume the overlapping region.

 *

 * {{{

 * val madhatter = "(h)(?=(at[^a]+))".r

 * val madhats = (madhatter findAllMatchIn hathaway map {

 * case madhatter(x,y) => s"$x$y"

 * }).toList          // List(hath, hatth, hattth, hatttt)

 * }}}

 *

 * Attempting to retrieve match information before performing the first match

 * or after exhausting the iterator results in [[java.lang.IllegalStateException]].

 * See [[scala.util.matching.Regex.MatchIterator]] for details.

 *

 * @param source The text to match against.

 * @return  A [[scala.util.matching.Regex.MatchIterator]] of matched substrings.

 * @example  {{{for (words <- """\w+""".r findAllIn "A simple example.") yield words}}}

 */

 def findAllIn(source: CharSequence) = new Regex.MatchIterator(source, this, groupNames)

这里写图片描述

 

模式匹配二

1

2

//找到首个匹配项

println(numberPattern.findFirstIn("99ss java, 222 spark,333 hadoop"))

这里写图片描述

 

模式匹配三

1

2

3

//数字和字母的组合正则表达式

 val numitemPattern="""([0-9]+) ([a-z]+)""".r

 val numitemPattern(num, item)="99 hadoop"

这里写图片描述

 

模式匹配四

1

2

3

4

5

6

7

//数字和字母的组合正则表达式

val numitemPattern="""([0-9]+) ([a-z]+)""".r

val line="93459 spark"

line match{

 case numitemPattern(num,blog)=> println(num+"\t"+blog)

 case _=>println("hahaha...")

}

这里写图片描述

 

1

2

3

4

5

val line="93459h spark"

 line match{

  case numitemPattern(num,blog)=> println(num+"\t"+blog)

  case _=>println("hahaha...")

 }

这里写图片描述

 

本节所有程序源码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

package kmust.hjr.learningScala19

/**

 * Created by Administrator on 2015/10/17.

 */

object RegularExpressOps {

 def main(args:Array[String]):Unit={

 val regex="""([0-9]+)([a-z]+)""".r//"""原生表达

 val numPattern="[0-9]+".r

 val numberPattern="""\s+[0-9]+\s+""".r

 //findAllIn()方法返回遍历所有匹配项的迭代器

 for(matchString <- numPattern.findAllIn("99345 Scala,22298 Spark"))

  println(matchString)

 //找到首个匹配项

 println(numberPattern.findFirstIn("99ss java, 222 spark,333 hadoop"))

 //数字和字母的组合正则表达式

 val numitemPattern="""([0-9]+) ([a-z]+)""".r

 val numitemPattern(num, item)="99 hadoop"

 val line="93459h spark"

 line match{

  case numitemPattern(num,blog)=> println(num+"\t"+blog)

  case _=>println("hahaha...")

 }

 }

}

这里写图片描述

\

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值