《R数据科学实战:工具详解与案例分析 》 —2.5.3 简易正则表达式创建
2.5.3 简易正则表达式创建
数据集df是笔者从网络上获取的一组英文期刊作者名和年份(具体见表2-27),以此为例,简单演示正则表达式的组合过程。示例代码如下:
> df
表2-27 练习数据集df内容展示
函数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 去除页码后的演示数据集
更复杂的正则表达式可以参看Garrett Grolemund和Hadley Wickham合著的《R for Data Science》的第14章,或者全面介绍正则表达式的《Mastering Regular Expressions》,Jeffrey E. F. Friedl著。
- 点赞
- 收藏
- 关注作者
评论(0)