《R数据科学实战:工具详解与案例分析 》 —2.5.3 简易正则表达式创建

举报
华章计算机 发表于 2019/11/09 21:03:24 2019/11/09
【摘要】 本节书摘来自华章计算机《R数据科学实战:工具详解与案例分析》 一书中第二章,第2.5.3节,作者刘 健 邬书豪 。

2.5.3 简易正则表达式创建

数据集df是笔者从网络上获取的一组英文期刊作者名和年份(具体见表2-27),以此为例,简单演示正则表达式的组合过程。示例代码如下:

> df

表2-27 练习数据集df内容展示

image.png

 

函数str_view/_all可以很直观地反映出数据内部匹配的项目。“.+”组合的意思是匹配除换行符“\n”以外的所有字符,字符至少出现一次,所以全部的字符都被匹配出来。若只希望匹配“.”,则需要使用反斜杠来告知函数,这是因为独立存在的“.”会被解析为任何除换行符以外的字符、字母和数字(见表2-26)。所以第二行代码的意思就是匹配第一个出现的英文句号:

> str_view(df$authors,pattern = ".+")

  D.F. Guinto pp.121-132

  W.T. Bussell and C.M. Triggs pp.23-27

  A.W. Holmes and G. Jiang pp.37-45

> str_view(df$authors,pattern = "\\.")

  D.F. Guinto pp.121-132

  W.T. Bussell and C.M.Triggs pp. 23-27

  A.W. Holmes and G.Jiang pp. 37-45

> str_view_all(df$authors,pattern = "\\.")

  D.F. Guinto pp.121-132

  W.T. Bussell and C.M.Triggs pp. 23-27

  A.W. Holmes and G.Jiang pp. 37-45

匹配所有字母和数字,代码如下:

> str_view_all(df$authors,pattern = "[:alnum:]+")

  D.F. Guinto pp.121-132

  W.T. Bussell and C.M. Triggs pp.23-27

  A.W. Holmes and G. Jiang pp.37-45

小提示

str_view/_all的返回结果会显示在Rstuido的viwer中,而不会显示在console中。

当处理数据较多时,str_view/_all的速度可能会很慢,可以使用str_detect来检测所使用的表达式在数据中是否有匹配。该函数只返回逻辑判断,代码如下:

> str_detect(df$authors,pattern = "\\.")

## [1] TRUE TRUE TRUE

在df中,页码可以被归类为无用信息,所以需要清理掉。下面的代码使用了str_replace来将页码的部分完全替换掉。匹配模式为"pp\\..+[:digit:]{2,3}\\-[:digit:]{2,3}"。分解这个正则表达式:“pp”匹配“pp”;“ \\.”匹配“.”;“.+”代表“pp.”后面的任何字符串;“[:digit:] {2,3}”代表2到3位数字;“\\-”匹配“-”;最后的[:digit:]{2,3}表示数字出现2到3位。

> df$authors <- str_replace(df$authors,pattern = "pp\\..+[:digit:]{2,3}\\-[:digit:]{2,3}",replacement = "")

> df1

处理后的结果显示在表2-28中。

表2-28 去除页码后的演示数据集

image.png

 

更复杂的正则表达式可以参看Garrett Grolemund和Hadley Wickham合著的《R for Data Science》的第14章,或者全面介绍正则表达式的《Mastering Regular Expressions》,Jeffrey E. F. Friedl著。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。