有时候我们要处理惩罚的长短布局化的数据,譬喻网页或是电邮资料,那么就需要用R来抓取所需的字符串,整理为进一步处理惩罚的数据形式。R语言中有一整套可以用来处理惩罚字符的函数,在之前的博文中已经有所涉及。但真正的要用好字符处理惩罚函数,则不得不消到正则表达式。正则表达式(Regular Expression、regexp)是指一种用来描写必然数量文本的模式。纯熟把握正则表达式能使你随心所欲的操纵文原来告竣方针。其实进批改则表达式并没有想像中的那么坚苦。较好要领是从例子开始,然后多操练,多利用。网络上已经有很多不错的参考资料,譬喻这篇或那篇。本文假设你对正则表达式有了根基的相识,下面我们来看看如安在R内里来利用它。
假设我们有一个字符向量,包罗了三个字符串。我们的方针是从中抽取电邮地点。R语言中许多字符函数都能识别正则表达式,而最重要的函数就是gregexpr()。该函数的第一个参数是正则表达式,前后需要用引号,对元字符举办转义时要用\\。第二个参数是期待处理惩罚的文本。那么用如下三行代码,我们从word字符向量中获得一个列表,个中第一项元素中的5暗示电邮地点从第5个字符位置开始,24暗示电邮地点长度为24。
[[1]] [[2]] [[3]] 下一步我们需要将电邮地点抽取出来,此时共同substr函数,即可按照需要字符串的位置来提取子集。word <- c(‘abc [email protected]’,‘text with no email’,‘first [email protected] also [email protected]’)
pattern <- ‘[-A-Za-z0-9_.%]+@[-A-Za-z0-9_.%]+\\.[A-Za-z]+’
[1] 5
attr(,”match.length”)
[1] 24
[1] -1
attr(,”match.length”)
[1] -1
[1] 7 27
attr(,”match.length”)
[1] 14 17
1 |
|
[1] “[email protected]”
更利便的利用方法是按照上述要领成立一个自界说函数getcontent,参数s暗示待处理惩罚的文本,参数g暗示的是通过gregexpr函数处理惩罚后的功效。这个函数我们在后头还会用到。

下面我们用一个较大的例子来说明在实际的数据抓取事情中,如何利用正则表达式。豆瓣影戏是博主常常去的处所。此次任务方针是要抓取豆瓣影戏中250部较佳影戏的资料。R代码如下:


用散点图来调查数据,可以看到前250名影戏中大部门是1980年之后刊行的。1997年和2010年刊行的影戏有不少佳构。而个中赤色点所代表的是哪部影戏你知道吗?那就是Titanic。
