- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
R语言正则表达式
正贝U表达式详解来源: dearchao , Gloria Li and Jenny Bryan 编译: 思亮
R语言中字符串的匹配替换是字符串操作的常见工作,正则表达式用于描述文本的 拼写规则,这些规则用于我们的匹配,替换等操作中。本文介绍 R中正则表达式
的基本常见用法
入门和相关函数
了解正则表达式的童鞋们,看完本文后,可以什么都不记得,但是我要说的是,对 于更为深入理解正则表达式,需要结合各种情况多练习,方能熟练应用。一句话,
我亦无他,唯手熟尔”,同样适用于学习R语言的其他相关技术。
正则表达式相关的函数主要有 grep,grepl,sub,gsub等,用于匹配或者替换。 下面给出一个简单的例子来理解正则表达式是搞嘛的。我要在如下的字符串中寻找 包含了单词hi的字符串
charvecv- c( hit , shi , hi , chip , Hi , HI ,‘hl , hi, girl , Li: hi,
hi美女’)
grep (hi ,charvec)
## [1] 1 2 3 4 8 9 10
可以看到,包含了 hi的所有字符都会被匹配上,似乎并不包含大小写,或者不管 字符串是否为一个单词。现在看我们的问题似乎没有那么简单,我们的任务是匹配 包含了 hi这个单词的字符串。这里,\b是正则表达式中匹配单词边界,虽然单词 分界一般用的是空格,标点符号,但\b匹配的不是单词的某个分隔符号,而是一 个位置,记住它是一个位置,是个空的字符。
准确地讲,\b匹配一个位置,该位置前一个和后一个字符不都是当前区域语言环 境下的字母,数字,下划线。也就是说,单词的分界位置前后不能都是字母、数字 和下划线。这个描述是不是很抽象?我觉得也是,理解它花了好久,好久,好久。
grep (WbhiWb ,charvec)
## [1] 3 8 9
上面的代码让我们直观知道了何为正则表达式下面就根据不同表达式的应用场合来 论述。
字母和数字
我们已经知道的一些字符有\b,还有其他常用的一些表达式,我们称为元字符
? \d 数字 0,1,2,3, ...,9
? \w单词,指当前区域语言的字母、数字和下划线。如果是中文区域语言,汉 字也是单词。
\b单词的开始或结束位置
[:digit:]数字 0~9
[:alpha:]当前区域语言的字母
[:alnum:]当前区域语言的字母和数字
[:lower:]当前区域语言小写字母
[:upper:]当前区域语言大写字母
[a-z]小写英文字母a~z
[A-Z]大写英文字母A~Z
[A-z]所有大小写英文字母
charvecv- c(-,,
,o , word , 10,单词,,精確)
grep (\\w ,charvec,
value= T) #找出所有包含了单词的字符,注意这里单词包含了字
母
## [1] word 10
II
单词 精確
grep ([[:alpha:]]
,charvec,
value= T) # 同上
## [1] word
单词
精確
grep ([a-z] ,charvec, value=
T) #找到包含小写英文字母的字符
## [1] word
开始与结束
虽然\b给出了对应的单词边界位置,但是有时我们需要明确开始和结束位置。下 面介绍开始和结束的情况。
? A字符串的开始位置
? $字符串的结束位置
当我们掌握了若干个正则表达式做法时,组合在一起就会产生奇妙的化学反应。
charvecv- c( about , book , word , this is a book )
grep (\\bb ,charvec, value= T)#找到包含了 b开头单词的字符串
## [1] bookthis is a book
## [1] book
this is a book
grep (Ab ,charvec, value= T) #找到仅以b开头的字符串
## [1] book
grep (Ab.*k$ ,charvec, value= T) #找到以 b 开头,k 结尾的字符串
## [1] book
最后的代码中用到了重复*和.,下面讲讲重复
重复
重复是经常和其他正则表达式的元字符配合使用的一类
?.除了换行符\n以外的任意字符
? ?前面的项目重复最多一次
? *前面的项目重复了 0次或者多次
? +前面的项目重复了 1次或更多次
? {n}前面的项目重复了 n次
? {n,}前面的项目重复了 n次或更多次
? {n,m}前面了项目重复了至少n次,不多于m次
charvecv- c( oh , ohhh , ohh , oohhhhh, my god , ohho)
grep (oh{2} ,charvec, value= T) #找至V
原创力文档


文档评论(0)