r语⾔regexpr函数_R语⾔之字符函数和正则表达式
字符串长度函数:
length():返回向量元素的个数、矩阵元素的个数、数据框字段数量和列表元素的个数。
nchar():返回每⼀个字符值的字符数
cat()函数可以显⽰和连接字符串。该函数可以将字符值合并,并直接打印在屏幕中,该函数成为在函数内部打印消息或警告信息的理想函
数,⽽paste()函数和print()函数输出效果不理想。
发现,⽤print函数和paste函数在屏幕中输出带引号的字符串,总觉得有点别扭。
cat()函数中使⽤'\n'参数为换⾏符,确保改⾏的完整信息。'\t'为4字节的空格
cat()函数的参数fill可⽤于输出字符串中⾃动插⼊换⾏符,如果fill设置为TRUE,则系统的width值将被⽤来确定⾏宽,如果fill参数为⼀个给
定的数值,则输出结果的宽度将使⽤该值。
cat()函数中有⼀个参数为file,该参数允许输出结果指定到⼀个⽂件中。
paste()函数可以⽆限量的连接字符串,当把⼀个字符向量传递给paste()函数时,通常使⽤collapse=参数,因为sep=参数对输⼊的向量不
起作⽤
substring()或substr()函数获取字符串的⼦串,first(start)和last(stop)参数可以是⼀个数值,也可以是⼀个向量。
在应⽤中强烈建议使⽤substring()函数,该函数更为稳定
为了到字符串中⼀个特定字符的位置,⾸先需要将字符串转换为字符向量(可以向substr函数的first和last参数传递向量来完成),然后通
过which函数确定某个字符的位置。
正则表达式是⼀种表达字符值模式的⽅法,可以被⽤来提取字符串的⼀部分或以某种⽅式修改这些字符串。这⾥主要讲解R中常⽤的6个正则表达式函数(split,grep,regexpr,gregexpr,sub,gsub)
strsplit()函数可以使⽤字符串或正则表达式将字符串划分为更⼩的段,该函数的第⼀个参数是要拆分的字符串,第⼆个参数是⽤来将字符串分解成多个部分的字符值或正则表达式。该函数将分解后的⼦段返回到列表中。
语法如下:
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
应⽤:
发现,parts1中会单独把空格当做值列出来。
案例,把数据框中的邮箱⼦段拆分成邮箱名和邮箱地址两个字段。
个⼈觉得这个⽅法还是繁琐了点,还请各位看官提出更⽅便简洁的⽅法~谢谢啦。
strsplit()函数还可以接受正则表达式来决定在哪⾥拆分字符串,例如,⼀个字符串中含有多个空格,当使⽤空格作为拆分符时,就可能返回
多余的空字符串。
grep()函数接受⼀个正则表达式和⼀个字符串或字符串向量,并返回由正则表达式匹配的字符串元素的索引。如果参数value=TRUE,则它将返回与正则表达式匹配的实际字符串⽽不是其索引号。
语法如下:其中x必须为字符向量
grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE,fixed = FALSE, useBytes = FALSE, invert = FALSE)
应⽤:该函数的⼀个重要⽤途是依据名称从⼀个数据框中提取⼀组变量
如在LifeCycleSavings数据框中,存在两个变量,都是以'pop'开头,我们可以使⽤grep函数到这两个变量
返回以某个字符开头或某个字符结尾的字符串
要查的正则表达式不考虑输⼊的⼤⼩写时,可以使⽤ignor.case=TRUE
很显然第⼆个字符'work doggedly'就不是我们所期望的结果,为解决该问题,可以使⽤转义尖括号(\\)限制字符串被空格、标点符号或起
始⾏或结束⾏包围情况下的匹配。
如果传递给grep的正则表达式与其任何输⼊都不匹配,grep将返回⼀个空的数值型向量,换句话说,该函数可以⽤来测试⼀个正则表达式是否存在。
regexpr()和gregexpr()函数可⽤于准确指出和提取字符串中与正则表达式相匹配的部分,这两个函数的输出为⼀个向量和列表,由所发现的正则表达式的起始点组成;如果没有匹配发⽣,返回值为-1,此外,match.length属性与起始点向量结合,提供字符匹配的准确信息。regexpr函数只提供其输⼊字符串中第⼀个匹配的有关信息,⽽gregexpr函数返回所有匹配的信息。
语法如下:
regexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
应⽤:
提取出匹配的字符
在这⾥使⽤另⼀个处理输出的函数mapply,该函数的第⼀个参数为函数,接受多个参数,其余参数是长度相同的向量,其元素将逐⼀传递
到函数中。
sub()和gsub()函数是基于正则表达式的⽂字替换,它们均接受正则表达式的输⼊参数。
sub()函数只改变第⼀次出现的正则表达式,⽽gsub()函数可以替换所有满⾜正则表达式的字符。
这两个函数的⼀个重要⽤途涉及到数值型数据中,这些数据从⽹页或财务报表中读⼊,并可能包含逗号或美元符号。
语法:
sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,fixed = FALSE, useBytes = FALSE)
应⽤:
⼤致正则表达式的语法和案例就介绍到这⾥,接下来对正则表达式做⼀些总结性的⼯作(参考《R语⾔数据操作》这本书):
1、反斜杠\字符⽤在正则表达式中,表⽰正则表达式中某些具体特殊含义的字符应该作为普通的字符来对待。在R中,当遇到特殊字符时(\t,\n等)需要输⼊两个反斜杠。
2、正则表达式由3个部分组成:
a、原意符,它是由⼀个单⼀的字符匹配
b、字符类,它可以与许多字符值的任何⼀个相匹配
c、修正符,对原意符和字符类进⾏操作
3、由于许多表点符号是正则表达式的修正符,必须始终加⼀个反斜杠保留其原意:
regex匹配
. ^ $ + ? * ( ) [ ] { } | \
4、要形成⼀个字符类,使⽤⽅括号[]把需要匹配的字符括起来。如需要创建⼀个由a,b或3组成的字符
类,可⽤[ab3]表⽰。破折号可⽤在字符类内部来表⽰值域[a-z],[A-Z],[0-9]
5、如果在R中输⼊⼀个正则表达式,是使⽤双引号的字符串,就需要双反斜杠,如果使⽤readline输⼊表达式,只需要⼀个反斜杠。
6、R中正则表达式的修正符:
修正符 含义
^ 定位表达式,⽬标开始
$定位表达式,⽬标结束
. 匹配换⾏符以外的任何单个字符
| 分割不同的模式
( ) 将相同模式放在⼀起
* 匹配前⾯的实体出现0次或更多次
匹配前⾯的实体出现0次或1次
+ 匹配前⾯的实体出现1次或更多次
{n} 匹配前⾯的实体精确地出现n次
{n,} 匹配前⾯的实体⾄少出现n次
{n.m} 匹配出现次数在n和m次之间
总结:常⽤的字符串函数
length()
nchar()
cat()
paste()
substring()
strsplit()
grep()
regexpr()
gregexpr()
sub()
gsub()
作者:刘顺祥
:每天进步⼀点点
博客专栏:每天进步⼀点点2015
友情提醒:本周四晚上8点半,刘顺祥⽼师《⼿把⼿教你做⽂本处理》欢迎⼤家报名:Hellobi Live | ⼿把⼿教你做⽂本处理 内容:1、jiebaR的简介及切词 2、⽂字云的绘制;3、tm包的简介及构建⽂档词条矩阵; 4、聚类的简单使⽤; 。可以加下⼩编:tswenqu,可以到对应跟顺祥⽼师互动。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。