关闭

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

标签: scala正则表达式regex
402人阅读 评论(0) 收藏 举报
分类:

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
1
0
查看评论

scala之正则表达式(一)基础匹配

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组 成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。给定一个正则表达式和另一个字符串 ,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)...
  • legotime
  • legotime
  • 2016-08-02 20:29
  • 10323

scala模式匹配和正则表达式

匹配字面量和常量
  • fanshadoop
  • fanshadoop
  • 2014-06-26 10:37
  • 5890

Scala基础教程(八):模式匹配、正则表达式

匹配使用case 类: case classes是用于模式匹配与case 表达式指定类。这些都是标准类具有特殊修饰:case。下面是一个简单的模式使用case class匹配示例: object Test {    def main(args: Array[String])...
  • GarfieldEr007
  • GarfieldEr007
  • 2015-12-10 12:38
  • 3410

Scala中正则表达式以及与模式匹配结合

正则表达式 //"""原生表达 val regex="""([0-9]+)([a-z]+)""".r val numPattern="[0-9]+".r val...
  • yizheyouye
  • yizheyouye
  • 2015-10-17 15:45
  • 6927

Scala教程(九)正则表达式

什么是正则表达式:在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。正则表达式规定的一个特殊代码叫作它元字符(metacharacter) 字符转义:如果你想查找元字符本身的话,比如你查找.,...
  • yuan_xw
  • yuan_xw
  • 2015-09-23 17:46
  • 2218

Scala入门到精通——第十二节 I/O与正则表达式

本节主要内容 Scala I/O操作简介 Scala 写文件 Scala 读文件 Scala 网络I/O 正则表达式简介 Scala正则表达式实战 1. Scala I/O操作简介I/O操作是一门编程语言中的重要内容,在Scala中,它更多的是调用java中的I/O类或者通过对java中的I/O类进...
  • lovehuangjiaju
  • lovehuangjiaju
  • 2015-07-26 16:28
  • 15460

scala 正则表达式

正则表达式是所有攻城狮尤其是算法,数据相关攻城狮必备的技能。日常工作中免不了处理各种字符串与字符串操作,写好正则表达式能大幅度提高工作效率,提升工作愉悦度。现在就简单总结一下scala中常见的正则表达式用法。如果有对正则表达式不熟悉的同志们,可以查看正则表达式30分钟入门教程。1.匹配电话号码匹配电...
  • bitcarmanlee
  • bitcarmanlee
  • 2017-05-23 11:32
  • 867

Scala学习笔记1 - 基础

本文档针对scala 2.10.x,由于scala目前发展迅速,因此可能会和其他版本的不同。 ===概述          scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结...
  • guohecang
  • guohecang
  • 2016-08-04 11:47
  • 751

SCALA学习笔记(一)

变量 获取变量的值是一个耗时的工作时,可以考虑使用lazy var. lazy val forLater = someTimeConsumingOperation() scala> val first :: rest = List(1, 2, 3) first: Int = 1...
  • bluishglc
  • bluishglc
  • 2015-02-27 08:46
  • 23541

Scala的正则表达式regex操作

 9.   misc 9.1.     json Scala-json 9.2.     Configgy http://www.lag.n...
  • Rocky_wangjialin
  • Rocky_wangjialin
  • 2014-10-16 12:20
  • 4983
    个人资料
    • 访问:1517572次
    • 积分:22609
    • 等级:
    • 排名:第378名
    • 原创:624篇
    • 转载:133篇
    • 译文:60篇
    • 评论:189条
    博客专栏
    文章分类
    最新评论