前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据之脚踏实地学18--Scala正则表达式的使用

大数据之脚踏实地学18--Scala正则表达式的使用

作者头像
1480
发布2019-05-22 20:49:00
1.1K0
发布2019-05-22 20:49:00
举报
文章被收录于专栏:数据分析1480数据分析1480
前言

在《大数据之脚踏实地学17--Scala字符串的清洗》一文中我们介绍了Scala语言中常用的字符串处理方法,但这些方法并不是万能的,例如字符串子串的获取,如果目标子串并不在固定的位置,此时切片即将无效;字符串子串的替换,如果目标子串的值不确定,位置也不确定时,便无法基于replace的方法进行替换;字符串的分割,如果分隔符并不是固定的字符,而是某种具有规律的对象,那么普通的split方法也同样无法有效。

所以,对于上面所提到的几种情况,我们在本文将跟大家介绍强大的正则表达式,利用正则表达式便可以轻松地解决各种字符串中常见的难题(正则表达式是描述字符串规律的字符串)。本文内容介绍:

字符串子串的查询 字符串子串的替换 字符串的分割

正如前文所说,正则表达式是描述字符串规律的字符串,那么构成字符串规律的正则符号都有哪些,以及这些符号的含义和用法是怎样的,读者朋友可以前往《Python中正则表达式的巧妙使用》一文中找到答案,本文就不赘述了。

子串的查询

基于正则表达式完成字符串中子串的查询,可以使用findFisrtIn、findAllIn或findAllMatchIn方法。他们的区别如下:

findFirstIn:查询出满足规律的第一个子串; findAllIn:查询出满足规律的所有子串; findAllMatchIn:与findAllIn类似,除此还可以配合()进行组元素的获取;

需要说明的是,在使用正则表达式做字符串相关的处理时,可以通过如下两个方式构造正则表达式:

pattern.r:即在字符串后面加上.r字符,这样原字符串便成了正则表达式; 导入scala.util.matching.Regex函数,通过函数构造正则表达式;

举例

代码语言:javascript
复制
// 查询出所有包含a字母的单词(不区分大小写)
val S1 = "Today is Thursday, the weather is good, what about tomorrow?"
// 构造正则表达式
val pattern1 = "[a-zA-Z]*[aA][a-zA-Z]*".r
pattern1.findAllIn(S1).toList

OUT:
List[String] = List(Today, Thursday, weather, what, about)


// 导入函数
import scala.util.matching.Regex
// 查询出身高信息
val S2 = "name:张三,height:178,weight:68 name:李四,height:168,weight:62"
// 与Python不同的是,如下需要使用双反斜杠
val pattern2 = new Regex("height:(\\d+)")
// 利用for...yield将迭代对象中的内容存储到Res变量中
val Res = for(i <- pattern2.findAllMatchIn(S2)) yield i.group(1)
println(Res.toList)

OUT:
List(178, 168)
子串的替换

对于字符串子串的替换问题,可以将正则表达式利用在如下两个方法中: replaceFirstIn:替换满足正则表达式的第一个子串; replaceAllIn:替换满足正则表达式的所有子串;

举例

代码语言:javascript
复制
 // 将字符串中的数字替换为减号
val S3 = "现在是2019年4月5日,晚上21点17分"
val pattern3 = "\\d+".r
pattern3.replaceAllIn(S3,"-")

OUT:
现在是-年-月-日,晚上-点-分
字符串的分割

字符串分割就更加简单了,只需要将正则表达式跟split函数搭配使用即可。下面通过一个简单的例子加以说明。

举例

代码语言:javascript
复制
// 将字符串按照标点符号切割开
val S4 = "学习Scala,是一个漫长的过程。需要系统地学习,加油吧!兄弟。"
val pattern4 = new Regex("[,。!]")
pattern4.split(S4)

OUT:
Array[String] = Array(学习Scala, 是一个漫长的过程, 需要系统地学习, 加油吧, 兄弟)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 子串的查询
  • 子串的替换
  • 字符串的分割
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档