R正则表达式(grep,grepl,regexpr,sub,gsub)

传统的统计学教育几乎没有告诉过我们,如何进行文本的统计建模分析。然而,我们日常生活中接触到的大部分数据都是以文本的形式存在。文本分析与挖掘在业界中也有着非常广泛的应用。

由于文本数据大多属于非结构化的数据,要想对文本数据进行传统的统计模型分析,必须要经过层层的数据清洗与整理。

今天我们要介绍的『正则表达式及R字符串处理』就是用来干这一种脏活累活的。

与建立酷炫的模型比起来,数据的清洗与整理似乎是一种低档次的工作。如果把建立模型类比于高级厨师的工作,那么,数据清洗无疑是类似切菜洗碗打扫卫生的活儿。然而想要成为资深的『数据玩家』,这种看似低档次的工作是必不可少的,并且,这种工作极有可能将占据你整个建模流程的80%的时间。

如果我们能够掌握高效的数据清洗工具,那么我们将拥有更多的时间来进行模型选择和参数调整,使得我们的模型更加合理有效。

下面将要将要举例说明,一一介绍R中常用来处理此类工作的几个函数。

首先学习grep函数,是R语言中最基本的正则表达式函数

赋值:

txt<-c(“one more”,“Hello world”,“up up day”,“one the more”,“one two three”)

num<-c(“one”,“foru”)
num在txt的位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
regexpr函数

第一行:返回布尔值(1-匹配上,0-没匹配上)

第二行:返回匹配的长度,负值为没有匹配上

第三行:类型

第四行:是否有匹配上的结果(显示是否逐个字节进行匹配,默认为FALSE,即按字符而不是字节进行匹配)

attr(a,“index.type”)# 类型

attr(a,“match.length”) #返回匹配的长度,负值为没有匹配上

attr(a,“useBytes”) #查看是否有匹配上的结果

在这里插入图片描述
regexpr()函数只查询匹配第一个特定字符,要想多次匹配需要使用gregexpr()函数


Sub函数, 返回替换字符串后的具体内容

sub(ignore.case,extended,perl,fixed,useBytes,pattern,replacement,x)

参数:

ignore.case = FALSE,表示大小写敏感

extended = TRUE,表示使用egrep规则

perl = FALSE,表示不使用Perl规则

fixed = FALSE,表示不使用精确匹配

useBytes = FALSE,表示按字符匹配

pattern为字符串表示正则表达式

replacement也是字符串表示替换的内容

x为字符型向量表示被替换的字符向量

该函数会根据pattern的规则对x中各元素进行搜索,遇到符合条件的第一个子字符串的位置(gsub是替换所有符合条件的),用replacement替换该子字符串,返回替换后的结果,和x的结构相同
在这里插入图片描述
我们对replacement统一赋值为“”,在c(“abcd”,“dcba”)里面查找"a",替换为空。
该例中的"a"只是一个字符,并不是正则表达式,真正的正则表达式依靠元字符进行灵活的匹配。

在这里插入图片描述
表示将开头为a的字符串中的a替换成空,在返回值中可以发现后面出现的a并没有被替换。如果要将开头的一个字符串替换,简单地写成“^ab”就行。

在这里插入图片描述
表示将以a结尾的字符串中的a替换成空。

除此以外
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于sub只替换搜寻到的第一个,因此这个例子中用gsub效果更好。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上是最基础的正则表达式元字符,在一些正则表达式的书籍和资料中有非常详细的介绍。最后需要提一下的是“贪婪”和“懒惰”的匹配规则。默认情况下是匹配尽可能多的字符,是为贪婪匹配,默认匹配最长的a开头b结尾的字串,也就是整个字符串。
在这里插入图片描述

如果要进行懒惰匹配,也就是匹配最短的字串,只需要在后面加个“?”#就会匹配最开始找到的最短的a开头b结尾的字串。
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值