[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
版权声明:本文为博主原创文章,未经博主允许不得转载。

第23节:Scala外部命令和正则表达式

import sys.process._  //导入包   object Hell0RegExpAndCMD{      def main(args: Array[String]): Unit...

Scala 文件和目录操作并解决编码问题

很多人读取文件的时候都遇到过java.nio.charset.MalformedInputException: Input length = 1这个令人抓狂的错误。即使按照网上说的改了编码,也没有太大...

scala学习笔记-文件和正则表达式

1. 读取行 读取文件中的所有行: 调用scala.ios.Source对象的getLines方法: import scala.ios.Source var source=Source.fromFil...

scala学习笔记1(表达式)

object test { def main(args: Array[String]) { // println(hello("scala")) // ...
  • lsshlsw
  • lsshlsw
  • 2014年08月29日 10:39
  • 634

Scala学习笔记(二)表达式和函数

笔记的整理主要针对Scala对比Java的新特性;   1、if表达式 if表达式是有结果返回的。 val a= if (5>2) “你好” else 1 a的值为if表达式返回值为 “你好...

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

一、for表达式 1、util与to的区别:scala> for(i for(i

scala学习笔记

  • 2016年04月13日 11:44
  • 9KB
  • 下载

Scala编程_学习笔记

  • 2016年12月18日 19:16
  • 4.71MB
  • 下载

scala学习笔记(七)

内建控制结构 1.嵌套枚举 如果加入多个子句,你就得到了嵌套的“循环”。  如果愿意的话,你可以使用大括号代替小括号环绕发生器和过滤器。使用大括号的一个好...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Scala]Scala学习笔记七 正则表达式
举报原因:
原因补充:

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