前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在Scala里面如何使用正则处理数据

在Scala里面如何使用正则处理数据

作者头像
我是攻城师
发布于 2018-05-14 09:02:24
发布于 2018-05-14 09:02:24
92600
代码可运行
举报
文章被收录于专栏:我是攻城师我是攻城师
运行总次数:0
代码可运行

正则在任何一门编程语言中,都是必不可少的一个模块,使用它来处理文本是非常方便的,尤其在处理在使用Spark处理大数据的时候,做ETL需要各种清洗,判断,会了正则之后,我们可以非常轻松的面对各种复杂的处理,Scala里面的正则也比Java简化了许多,使用起来也比较简单,下面通过几个例子来展示下其用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
  * Created by QinDongLiang on 2017/1/5.
  */object ScalaRegex {

  def main(args: Array[String]): Unit = {    
    //例子一整个字符串匹配模式
    println("51".matches("""\d+"""))//true

    //例子二查询是否包含复合正则的模式
    println("""\d+""".r.findAllIn("foo456bar").length!=0)//true

    //例子三返回第一个匹配正则的字符串
    var numbers="""\d+""".r   
    var str="foo 123 bar 456"
    println(numbers.findFirstIn(str))//Some(123)

    //例子四迭代所有匹配到的复合模式的字符串
    numbers.findAllMatchIn(str).foreach(println)// 123  456

    //例子五返回所有正则匹配作为一个List
    println(numbers.findAllMatchIn(str).toList)//List(123, 456)

    //例子六使用正则查询和替换
    var letters="""[a-zA-Z]+""".r    
    var str2="foo123bar"
    println(letters.replaceAllIn(str2,"spark"))//spark123spark

    //例子七使用正则查询和替换使用一个函数
    println(letters.replaceAllIn(str,m=>m.toString().toUpperCase()))//FOO 123 BAR 456

    //例子八使用正则查询替换字符
    var exp="""##(\d+)##""".r    
    var str8="foo##123##bar"
    //group 0 返回所有捕获,其他1...n分别返回第一个捕获,或第二个捕获,至第n个捕获
    println(exp.replaceAllIn(str8,m=>(m.group(0)).toString))//foo##123##bar

    println(exp.replaceAllIn(str8,m=>(m.group(1).toInt *2).toString))//foo246bar

    //例子九使用正则提取值进入一个变量里面
    val pattern="""(\d{4})-([0-9]{2})""".r    
    val myString="2016-02"

    val pattern(year,month)=myString

    println(year)//2016
    println(month)//02

    //例子十在case match匹配中使用 正则
    val dataNoDay="2016-08"
    val dateWithDay="2016-08-20"

    val yearAndMonth = """(\d{4})-([01][0-9])""".r    
    val yearMonthAndDay = """(\d{4})-([01][0-9])-([012][0-9])""".r

    dateWithDay match{   
   
   case yearAndMonth(year,month) => println("no day provided")        
   case yearMonthAndDay(year,month,day) => println(s"day provided: it is $day")
    }    //day provided: it is 20

    //例子十一正则匹配忽略大小写

    val caseSensitivePattern = """foo\d+"""
    println("Foo123".matches(caseSensitivePattern))//false


    val caseInsensitivePattern = """(?i)foo\d+"""
    println("Foo123".matches(caseInsensitivePattern))//true

    //注意使用正则字符串三个双引号,不需要转义

  }

}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于python正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
python与大数据分析
2022/03/11
3260
关于python正则表达式
前端进阶必须知道的正则表达式知识
正则表达式(Regular Expression) 是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。
石燕平
2019/12/03
7410
Python-re模块-正则表达式模块常用方法
Python的re模块提供了正则表达式的功能,可以用来进行高级的字符串匹配和处理。re模块的主要功能包括:
用户9006224
2023/10/11
3030
Go语言中的正则表达式:详细指南
在Go语言中,使用regexp.Compile函数编译正则表达式。编译后的正则表达式可以重复使用,提高了执行效率。
数字扫地僧
2024/06/27
3950
Scala 学习笔记之正则表达式
我们可以使用 scala.util.matching.Regex 类使用正则表达式.要构造一个 Regex 对象,使用 String 类的 r 方法即可:
smartsi
2019/08/07
7730
【Python】正则表达式的艺术:轻松驾驭 Python 的re库
本文将会先介绍什么是正则表达式,然后在介绍正则表达式在python中的应用。 下方图片及案例思路来自:正则表达式
Yui_
2024/12/20
1510
【Python】正则表达式的艺术:轻松驾驭 Python 的re库
JavaScript 又出新特性了?来看看这篇就明白了
https://juejin.im/post/5ca2e1935188254416288eb2
崔庆才
2019/05/06
1.6K0
Java基础——正则表达式与基础类应用
组捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
阿Q说代码
2021/05/13
4200
尚学堂-马士兵-专题-正则表达式
正则表达式是处理字符串的。 其实更确切的说,正则表达式是处理字符的。 就拿上面的例子来说, 每一个点代表一个字符。 那么abc是不是三个字符呀?是, 所以满足条件。
用户7798898
2020/09/27
1.2K0
尚学堂-马士兵-专题-正则表达式
写爬虫,不会正则怎么行?
很多人觉得正则很难,在我看来,这些人一定是没有用心。其实正则很简单,根据二八原则,我们只需要懂 20% 的内容就可以解决 80% 的问题了。我曾经有几年几乎每天都跟正则打交道,刚接手项目的时候我对正则也是一无所知,花半小时百度了一下,然后写了几个 demo,就开始正式接手了。三年多时间,我用到的正则鲜有超出我最初半小时百度到的知识的。
丹枫无迹
2019/08/20
5370
正则表达式介绍
Regex(英语:Regular Expression,在代码中常简写为 regex 、 regexp 或 RE ),又称正规表示式、正規表示法、正規運算式、規則運算式、常規表示法,是计算机科学的一个概念 ,正则表达式是一种编写匹配字符串的模式的方法。通常这些模式可用于搜索特定事物的字符串,或搜索然后替换某些事物等。正则表达式非常适合字符串操作!
iOSDevLog
2019/04/18
4.9K0
正则表达式介绍
ES9的新特性:正则表达式RegExp
正则表达式是我们做数据匹配的时候常用的一种工具,虽然正则表达式的语法并不复杂,但是如果多种语法组合起来会给人一种无从下手的感觉。
程序那些事
2021/04/07
5530
代码之美,正则之道
导语 “如果罗列计算机软件领域的伟大发明,我相信绝对不会超过二十项,在这个名单当中,当然应该包括分组交换网络,Web,Lisp,哈希算法,UNIX,编译技术,关系模型,面向对象,XML这些大名鼎鼎的家伙,而正则表达式也绝对不应该被漏掉。”-- Jeffrey Friedl《精通正则表达式》序言 从1956年至今,正则表达式活跃了半个多世纪,其热度依然不减,可见技术半衰期之长,因此,学习正则,不但重要,且受益漫长。 本文涉及 js、php、java、python、bash 等语言,共计 1.2w 字,适
腾讯技术工程官方号
2019/07/31
1.3K0
代码之美,正则之道
正则表达式
一、定义 正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式中的元字符 eg:"\\dhello"中的\\d就是有特殊意义的元字符,代表0--9数字中的任意一个,而9hello,1hello都是和正则表达式\\dhello匹配的字符串  ------------------------------------------------------------------------------------------------------------------------------
听着music睡
2018/05/18
8130
Python实战之字符串和文本处理
「 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波」
山河已无恙
2023/01/30
1.1K0
小览 ES6-ES2019 中正则表达式的新发展
在此前的 《JS正则表达式--从入门到精分》 一文中,曾经较完整的介绍过 Javascript 中正则表达式的用法。而从 ES6(ES2015) 开始,借助 Babel 等标志性的工具,JS 的发展似乎也不想重蹈 Flash 时代的无所作为,走上了每年一个小版本的快车道;在此过程中,正则表达式也陆续演化出一些新的特性。
江米小枣
2020/06/15
6690
一天学完spark的Scala基础语法教程十一、正则表达式(idea版本)
你可以使用 mkString( ) 方法来连接正则表达式匹配结果的字符串,并可以使用管道(|)来设置不同的模式:
红目香薰
2022/11/29
1.1K0
一天学完spark的Scala基础语法教程十一、正则表达式(idea版本)
正则的扩展
ES6 改变了这种行为。如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
小小杰啊
2022/12/21
9890
ES7、ES8、ES9、ES10新特性大盘点
从 ECMAScript 2016(ES7)开始,版本发布变得更加频繁,每年发布一个新版本,好在每次版本的更新内容并不多,本文会细说这些新特性,尽可能和旧知识相关联,帮你迅速上手这些特性。
心莱科技雪雁
2019/12/11
2K0
ES7、ES8、ES9、ES10新特性大盘点
ES2018新特性学习
ECMAScript 2018 (ES9) 在 6 月底正式发布,带来了很多新特性。关于 ES7 和 ES8 相关的知识,可以查看这篇文章 ES2016 和 ES2017 学习。目前大部分 ES7 和 ES8 的特性都得到主流浏览器的支持,而 ES9 的新特性还未能实现很好的兼容性。
李振
2021/11/26
6590
相关推荐
关于python正则表达式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验