数据爬虫:正则表达式与字符串处理函数 | R语千寻

Posted 狗熊会

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据爬虫:正则表达式与字符串处理函数 | R语千寻相关的知识,希望对你有一定的参考价值。

数据爬虫:正则表达式与字符串处理函数 | R语千寻

无论是利用R中的RCurl组件还是Python的BeautifulSoup库,对网页html完成下载解析之后,都可以从这些看似杂乱无章的文本中拿到感兴趣的数据。前文已经介绍过HTML/XML专用工具XPath表达式,下面介绍一款更为通用、更加底层的文本信息提取工具——正则表达式。

数据爬虫:正则表达式与字符串处理函数 | R语千寻

图6‑23 正则表达式

所谓正则表达式即使用一个字符串来描述、匹配一系列某个语法规则的字符串。通过特定的字母、数字以及特殊符号的灵活组合即可完成对任意字符串的匹配,从而达到提取相应文本信息的目的。在R语言中,有两种风格的正则表达式可以实现:一种就是在基本的正则表达式基础上进行扩展,这和相应的R字符串处理函数相关;另一种就是Perl正则表达式,这种风格的正则在R中并不常用,这里主要还是针对R默认的基础的正则表达式风格进行讲解。

R默认的正则表达式风格包括基础文本处理函数和stringr包中的文本处理函数。在R中二者都支持正则表达式,也都具备基本的文本处理能力,但基础函数的一致性要弱很多,在函数命名和参数定义上很难让人印象深刻。stringr包是Hadley Wickham开发的一款专门进行文本处理的R包,它对基础的文本处理函数进行了扩展和整合,在一致性和易理解性上都要优于基础函数。这里在介绍基本的正则表达式语法的基础上,通过R中这两种文本处理函数进行实例说明,也好让大家对R语言中正则表达式的基本用法有个大致了解,在后续的爬虫演练中更容易理解一些信息提取的细节知识。

基本的正则表达式语法

[A-Za-z0-9\._+]+@[A-Za-z0-9]+\.(com|org|edu|net)

其中:

数据爬虫:正则表达式与字符串处理函数 | R语千寻

[A-Za-z0-9\._+]+:“A-Z”表示匹配任意的A-Z大写字母,所有可能的组合放在中括号里表示可以匹配其中的任一个,加号表示任意字符可以出现1次或者多次,“\”表示转义,因为“.”在正则表达式中有特殊含义,想要正常地表达“.”号必须使用转义符。

@:邮箱必须的一个符号。

[A-Za-z0-9]:同前面一样,@符号后面必须有一个包含运营商信息的字符串。

这里需要简单地列一下基本的正则表达式语法(点击“阅读原文”,查看正则表达式速查表),这几个语法作为正则表达式的基础,必须用心记下来,并用一些简单的例子加深印象,是需要熟练掌握的。

另外也有一些在线测试正则表达式的网页,比如:https://www.regexpal.com/(见图6-24)。

数据爬虫:正则表达式与字符串处理函数 | R语千寻

图6‑24 正则表达式在线测试网站

R中正则表达式的使用方法

R语言中有大量可以处理字符串的函数,除了有像gsub()和grepl()等基础函数之外,还有功能强大的stringr包,在实际的文本处理中,通常掌握stringr的几个主要函数基本上就可以满足绝大部分需求,而stringr包也完美地支持正则表达式。具体函数和相应的含义如表6-4所示。

表6‑4 文本处理函数

数据爬虫:正则表达式与字符串处理函数 | R语千寻

以表6-4中部分基础字符处理函数为例,看一下正则表达式的用法,具体代码如下所示。

数据爬虫:正则表达式与字符串处理函数 | R语千寻

再来看stringr包。stringr包一共提供了30个字符串处理函数,其中大部分均可支持正则表达式的应用,包内所有函数均以str_开头,后面单词用来说明该函数的含义。相较于基础文本处理函数,stringr包函数更容易直观地理解。下面仅以str_extract()和str_extract_all()函数为例,对stringr包的正则表达式应用进行简要说明。

数据爬虫:正则表达式与字符串处理函数 | R语千寻

对于特定的字符我们可以手动指定,比如“[a-z A-Z]”表示a-z和A-Z之间的所有字母,但R预先定义了一些字符集方便大家调用,如表6-5所示。

表6‑5 R中的字符集

数据爬虫:正则表达式与字符串处理函数 | R语千寻

另外,R中正则表达式的应用还有若干简化的形式,它被分配给几个特定的字符类,如表6-6所示。

表6‑6 R中正则表达式的简化形式

数据爬虫:正则表达式与字符串处理函数 | R语千寻

例如:

数据爬虫:正则表达式与字符串处理函数 | R语千寻

作为网络数据抓取中的三种信息提取方式之一(另外两种分别是XPath表达式和CSS选择器),正则表达式是最为底层,也是最难掌握的一种语法,初学时不应追求复杂的正则表达式形式,做到简单有效地对文本模式进行匹配即可。


数据爬虫:正则表达式与字符串处理函数 | R语千寻

熊小编1分钟前

第一期:

第二期:

第三期:

第四期:



数据爬虫:正则表达式与字符串处理函数 | R语千寻



识别下方二维码成为狗熊会会员!

友情提示:

个人会员不提供数据、代码

视频only!

个人会员网址:http://teach.xiong99.com.cn

点击“阅读原文”,查看正则表达式速查表!

以上是关于数据爬虫:正则表达式与字符串处理函数 | R语千寻的主要内容,如果未能解决你的问题,请参考以下文章

数据爬虫:AJAX与网页动态加载 | R语千寻

HTTP协议与R语言爬虫 | R语千寻

跟我学R爬虫|正则表达式与字符处理函数

R语言爬虫系列5|正则表达式与字符串处理函数

R中的正则表达式及字符处理函数总结

系统进阶学习python,爬虫,网页设计,正则表达式(附源代码)