龙空技术网

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

爱数据社区 82

前言:

目前你们对“strsubphp”大体比较注意,看官们都想要分析一些“strsubphp”的相关资讯。那么小编在网摘上搜集了一些有关“strsubphp””的相关资讯,希望大家能喜欢,我们快快来学习一下吧!

我们日常生活中接触到的大部分数据都是以文本的形式存在。如何高效地处理文本数据,将看似杂乱无章的数据整理成可以进行统计分析的规则数据,是『数据玩家』必备的一项重要技能。

今天,我们要学习的『正则表达式』和『字符处理函数』将助你成为点石成金的数据魔法师。

正则表达式

在进行爬虫任务的时候,部分情况下,我们可以使用Xpath来提取我们需要的网页信息。但是,当我们需要的数据以一定的规则隐藏在一段文字中时,就不可避免地要使用到正则表达式。

正则表达式是对字符串类型数据进行匹配判断,提取等操作的一套逻辑公式。

处理字符串类型数据方面,高效的工具有Perl和Python。如果我们只是偶尔接触文本处理任务,则学习Perl无疑成本太高;如果常用Python,则可以利用成熟的正则表达式模块:re库;如果常用R,则使用Hadley大神开发的stringr包则已经能够游刃有余。

下面,我们先简要介绍重要并通用的正则表达式规则。接着,总结一下stringr包中重要的字符处理函数。

如果有时间,我将后续补充一个综合的使用案例。

元字符

正则表达式中,有12个字符被保留用作特殊用途。他们分别是:

[ ] \ ^ $ . | ? * + ( )

它们的作用如下:

[ ]:括号内的任意字符将被匹配;

\:具有两个作用:

1.对元字符进行转义

2.一些以\开头的特殊序列表达了一些字符串组

^:匹配字符串的开始.将^置于character class的首位表达的意思是取反义。如[^5]表示匹配除了”5”以外的任何字符。

$:匹配字符串的结束。但将它置于character class内则消除了它的特殊含义。如[akm$]将匹配’a’,’k’,’m’或者’$’.

.:匹配除换行符以外的任意字符。

|:或者

?:前面的字符(组)最多被匹配一次

*:前面的字符(组)将被匹配零次或多次

+:前面的字符(组)将被匹配一次或多次

( ):表示一个字符组,括号内的字符串将作为一个整体被匹配。

重复代码含义说明?重复零次或一次*重复零次或多次+重复一次或多次{n}重复n次{n,}重复n次或更多次{n,m}重复n次到m次转义

如果我们想查找元字符本身,如”?”和”*“,我们需要提前告诉编译系统,取消这些字符的特殊含义。这个时候,就需要用到转义字符\,即使用\?和\*.当然,如果我们要找的是\,则使用\\进行匹配。

注:R中的转义字符则是双斜杠:\\

R中预定义的字符组代码含义说明[:digit:]数字:0-9[:lower:]小写字母:a-z[:upper:]大写字母:A-Z[:alpha:]字母:a-z及A-Z[:alnum:]所有字母及数字[:punct:]标点符号,如. , ;等[:graph:]Graphical characters,即[:alnum:]和[:punct:][:blank:]空字符,即:Space和Tab[:space:]Space,Tab,newline,及其他space characters[:print:]可打印的字符,即:[:alnum:],[:punct:]和[:space:]代表字符组的特殊符号代码含义说明\w字符串,等价于[:alnum:]\W非字符串,等价于[^[:alnum:]]\s空格字符,等价于[:blank:]\S非空格字符,等价于[^[:blank:]]\d数字,等价于[:digit:]\D非数字,等价于[^[:digit:]]\bWord edge(单词开头或结束的位置)\BNo Word edge(非单词开头或结束的位置)\<Word beginning(单词开头的位置)\>Word end(单词结束的位置)stringr包中的重要函数函数功能说明R Base中对应函数使用正则表达式的函数str_extract()提取首个匹配模式的字符regmatches()str_extract_all()提取所有匹配模式的字符regmatches()str_locate()返回首个匹配模式的字符的位置regexpr()str_locate_all()返回所有匹配模式的字符的位置gregexpr()str_replace()替换首个匹配模式sub()str_replace_all()替换所有匹配模式gsub()str_split()按照模式分割字符串strsplit()str_split_fixed()按照模式将字符串分割成指定个数-str_detect()检测字符是否存在某些指定模式grepl()str_count()返回指定模式出现的次数-其他重要函数str_sub()提取指定位置的字符regmatches()str_dup()丢弃指定位置的字符-str_length()返回字符的长度nchar()str_pad()填补字符-str_trim()丢弃填充,如去掉字符前后的空格-str_c()连接字符paste(),paste0()

可见,stringr包中的字符处理函数更丰富和完整(其实还有更多函数),并且更容易记忆。或许速度也会更快。

其他相关的重要函数

windows下处理字符串类型数据最头疼的无疑是编码问题了。这里介绍几个编码转换相关的函数。

函数功能说明iconv()转换编码格式Encoding()查看编码格式;或者指定编码格式tau::is.locale()tests if the components of a vector of character are in the encoding of the current localetau::is.ascii()tau::is.utf8()tests if the components of a vector of character are true UTF-8 strings

End.

运行人员:中国统计网小编(微信号:itongjilove)

微博ID:中国统计网

中国统计网,是国内最早的大数据学习网站,公众号:中国统计网

标签: #strsubphp #正则表达式中的符号 #正则表达式特殊字符转义 #正则表达式 特殊字符