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

正则表达式

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

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

 /** 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()

模式匹配一

 //findAllIn()方法返回遍历所有匹配项的迭代器
 for(matchString <- numPattern.findAllIn("99345 Scala,22298 Spark"))
  println(matchString)

说明:findAllIn(…)函数简介

/** 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)

模式匹配二

 //找到首个匹配项
 println(numberPattern.findFirstIn("99ss java, 222 spark,333 hadoop"))

模式匹配三

//数字和字母的组合正则表达式
 val numitemPattern="""([0-9]+) ([a-z]+)""".r
 val numitemPattern(num, item)="99 hadoop"

模式匹配四

 //数字和字母的组合正则表达式
 val numitemPattern="""([0-9]+) ([a-z]+)""".r
 val line="93459 spark"
 line match{
  case numitemPattern(num,blog)=> println(num+"\t"+blog)
  case _=>println("hahaha...")
 }

val line="93459h spark"
 line match{
  case numitemPattern(num,blog)=> println(num+"\t"+blog)
  case _=>println("hahaha...")
 }

本节所有程序源码

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...")
 }
 }
}

总结

以上所述是小编给大家介绍的Scala中正则表达式以及与模式匹配结合(多种方式),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

(0)

相关推荐

  • 详解Java中的scala正则表达式

    Scala 通过 scala.util.matching 包中的 Regex 类来支持正则表达式. eg:使用正则表达式查找单词 Scala 实例中使用 String 类的 r() 方法构造了一个Regex对象.(也可直接new一个Regex对象实例)然后使用 findFirstIn 方法找到首个匹配项.如果需要查看所有的匹配项可以使用 findAllIn 方法. 可以使用 mkString( ) 方法来连接正则表达式匹配结果的字符串,并可以使用管道(|)来设置不同的模式: 如果需要将匹配的文本

  • Scala的文件读写操作与正则表达式

    目录 在本篇文章中你将会学习并了解常用的文件处理任务,例如读取文件的一行文本,本博客的要点包含: 1.Source.fromFile(...).getLines.toArray 输出文件所有行 2.Source.fromFile(...).mkString 以字符串形式输出文件内容 3.将字符串转换为数字,可以使用toInt或toDouble方法 4.使用java的PrintWriter写入文本文件 5."正则".r是一个Regex对象 6.若你的正则表达式包含反斜杠或者引号,请用&q

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

    正则表达式 //"""原生表达 val regex="""([0-9]+)([a-z]+)""".r val numPattern="[0-9]+".r val numberPattern="""\s+[0-9]+\s+""".r 说明:.r()方法简介:Scala中将字符串转换为正则表达式 /** You can follow a st

  • 实例解析Java程序中正则表达式的贪婪模式匹配

    贪婪模式(Greedy): 数量表示符默认采用贪婪模式,除非另有表示.贪婪模式的表达式会一直匹配下去,直到无法匹配为止.如果你发现表达式匹配的结果与预期的不符,很有可能是因为--你以为表达式只会匹配前面几个字符,而实际上它是贪婪模式,所以会一直匹配下去. 贪婪与非贪婪,加上?为非贪婪: var s = '1023000'.match(/(\d+)(0*)/); s ["1023000", "1023000", ""] var s = '10230

  • php正则表达式中的非贪婪模式匹配

    一般情况下,正则表达式的匹配是贪婪模式的,比如下面这个例子: 字符串:....src="http://www.bloghome.cn/1.mp3" type="application/x-mplayer2" .... 要求的结果:http://www.bloghome.cn/1.mp3 如果匹配表达式写为:/src="(.*)"/,则得不到正确的结果,因为最后一个双引号的匹配是贪婪模式的. 解决办法:匹配表达式写为: /src="(.*

  • Java中正则表达式的使用和详解(下)

    在上篇给大家介绍了Java中正则表达式的使用和详解(上),具体内容如下所示: 1.常用正则表达式 规则 正则表达式语法   一个或多个汉字 ^[\u0391-\uFFE5]+$  邮政编码 ^[1-9]\d{5}$ QQ号码 ^[1-9]\d{4,10}$  邮箱 ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$  用户名(字母开头 + 数字/字母/下划线) ^[A-Za-z][A-Za-z1-9_-]+$ 手

  • JS中正则表达式要注意lastIndex属性

     说明 这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性. 解释 每个RegExp对象都包含5个属性,source.global.ignoreCase.multiline.lastIndex. source:是一个只读的字符串,包含正则表达式的文本. var reg = /JavaScript/; reg.source; //返回 JavaScript global:是一个只读的布尔值,看这个正则表达式是否带有修饰符g. 修饰符g,是全局匹配的意思,检索字符串中所有的匹配.

  • scala中的隐式类型转换的实现

    Scala语言中的隐式转换是一个十分强大的语言特性,主要可以起到两个作用: 一.自动进行某些数据类型的隐式转换 String类型是不能自动转换为Int类型的,所以当给一个Int类型的变量或常量赋予String类型的值时编译器将报错.所以,一下语句是错误的. val x: Int = "100" 如果需要将一个字符串类型的整形数值赋给Int,比如使用String.toInt方法,例如: val x: Int = "100".toInt 如果想让字符串自动转换为整形,就

  • scala中常用特殊符号详解

    =>(匿名函数)  => 匿名函数,在Spark中函数也是一个对象可以赋值给一个变量. Spark的匿名函数定义格式: (形参列表) => {函数体} 所以,=>的作用就是创建一个匿名函数实例. 比如:(x:Int) => x +1 ,就等同于下面的Java方法: public int function(int x) { return x+1; } 示例: class Symbol { var add = (x: Int) => x + 1 } object test2

  • python中正则表达式 re.findall 用法

    Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本文主要给大家介绍

  • scala中停止循环的三种方式(推荐)

    Scala 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了更为复杂执行路径的多种控制结构. 循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图: 开始正文介绍: 1:使用return关键字 object BreakLoop { //1.使用return关键字 def add():Unit= { for(i <- 1 to 10){ if(i==7){ //停止循环

  • Java String中移除空白字符的多种方式汇总

    前言 字符串,是Java中最常用的一个数据类型了.我们在日常开发时候会经常使用字符串做很多的操作.比如字符串的拼接.截断.替换等. 这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中的空格. 其实,在Java中从字符串中删除空格有很多不同的方法,如trim,replaceAll等.但是,在Java 11添加了一些新的功能,如strip.stripLeading.stripTrailing等. 大多数时候,我们只是使用trim方法来删除多余的空格.但是好像很多人并没有去思考

随机推荐