[Scala]Scala学习笔记七 正则表达式

原创 2017年08月08日 10:15:54

1. Regex对象

我们可以使用scala.util.matching.Regex类使用正则表达式.要构造一个Regex对象,使用String类的r方法即可:

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

如果正则表达式包含反斜杠或引号的话,那么最好使用"原始"字符串语法"""...""":

val positiveNumPattern = """^[1-9]\d*$"""

如果在Java中使用上述正则表达式,则应该使用下面方式(需要进行转义):

val positiveNumPattern = "^[1-9]\\d*$"

相对于在Java中的使用方式,Scala这种写法可能更易读一些.

2. findAllIn

findAllIn方法返回遍历所有匹配项的迭代器.可以在for循环中使用它:

val str = "a b 27 c 6 d 1"
val numPattern = "[0-9]+".r
for(matchingStr <- numPattern.findAllIn(str)){
  println(matchingStr)
}

或者将迭代器转成数组:

val str = "a b 27 c 6 d 1"
val numPattern = "[0-9]+".r
val matches = numPattern.findAllIn(str).toArray
// Array(27,6,1)

3. findPrefixOf

检查某个字符串的前缀是否能匹配,可以使用findPrefixOf方法:

val str = "3 a b 27 c 6 d 1"
val str2 = "a b 27 c 6 d 1"
val numPattern = "[0-9]+".r
val matches = numPattern.findPrefixOf(str)
val matches2 = numPattern.findPrefixOf(str2)
println(matches) // Some(3)
println(matches2) // None

4. replaceFirstIn replaceAllIn

可以使用如下命令替换第一个匹配项或者替换全部匹配项:

val str = "3 a b 27 c 6 d 1"
val numPattern = "[0-9]+".r
val matches = numPattern.replaceFirstIn(str, "*")
val matches2 = numPattern.replaceAllIn(str, "*")
println(matches) // * a b 27 c 6 d 1
println(matches2) // * a b * c * d *

5. 正则表达式组

分组可以让我们方便的获取正则表达式的子表达式.在你想要提取的子表达式两侧加上圆括号:

val str = "3 a"
val numPattern = "([0-9]+) ([a-z]+)".r
val numPattern(num, letter) = str
println(num) // 3
println(letter) // a

上述代码将num设置为3,letter设置为a

如果想从多个匹配项中提取分组内容,可以使用如下命令:

val str = "3 a b c 4 f"
val numPattern = "([0-9]+) ([a-z]+)".r
for(numPattern(num, letter) <- numPattern.findAllIn(str)){
  println(num + "---"+letter)
}
// 3---a
// 4---f
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

scala之正则表达式(二)内部匹配函数

1、scala处理正则表达式步骤 以下面表达为例: val dateP1 = new scala.util.matching.Regex("""(\d\d\d\d)-(\d\d)-(\d\d)""",...

Scala中的正则表达式、与模式匹配结合的的Reg代码实战

内容: 1、正则表达式代码 2、与模式匹配结合的reg代码实战    与正则表达式相关的类是scala.util.matching.Regex类。要构造一个Regex对象,使用String类...

scala-正则表达式

构造一个Regex对象,用String类的r方法 import scala.util.matching.Regex val numPattern = "[0-9]+".r 如果正则表达式包含反斜杠...

scala学习笔记1(表达式)

object test { def main(args: Array[String]) { // println(hello("scala")) // ...

Scala学习笔记(五) ---- try-catch-finally表达式,for表达式

一、for表达式 1、util与to的区别:scala> for(i for(i <- 1 until 4) print("#" + i) //结果 #2#3#4上面例子比较了until和t...

scala学习笔记

Scala编程_学习笔记

  • 2016-12-18 19:16
  • 4.71MB
  • 下载

Scala学习笔记(2)

Scala基本语言特性相比Java``C++等语言,Scala融合了OOP``FP等编程范式,同时语法上更灵活。语法基础(概览) Scala语言中不强制要求分号,可以依行断句,只有一行带有多个语句时才...

Scala学习笔记(二)—chapter2

1、scala中的Unit相当于java或C里的void。2、块,在scala中,{ }块包含一系列表达式。块中最后一个表达式的值就是块的值。3、循环语句 (1)for循环和while\do whi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)