R数据科学-第七章使用stringr处理字符串

一、字符串基础

1.字符串长度str_length

>library(stringr)
> str_length(c("a","R for data science",NA))
[1]  1 18 NA

2.字符串组合str_c

> str_c("x","y")
[1] "xy"
> str_c("x","y","z",sep=",")#使用sep参数控制字符串之间的间隔方式。
[1] "x,y,z"
> str_c("abc",NA)#NA会传染
[1] NA
> str_c("abc",str_replace_na(NA))#加入str_replace_na后,NA就不会传染了。
[1] "abcNA"

str_c自动循环短向量,使之与长向量长度相同:

> str_c("Hello ",c("Dancy","Nancy"),"!")
[1] "Hello Dancy!" "Hello Nancy!"

长度为0的对象会被丢弃,这与if结合起来很有用:

name<-c("Dancy","Nancy")
time_of_day<-"morning"
birthday<-FALSE
str_c("Good ",time_of_day," ",name,if(birthday)" and happy birthday!",".")
[1] "Good morning Dancy." "Good morning Nancy."

将字符向量合并为字符串,用collapse参数:

> str_c(c("x","y"),collapse = ",")
[1] "x,y

3.字符串取子集str_sub

str_sub(string,start=,end=),start与end表示取出每个子串的开始和结束的位置。

> str_sub(c("apple","pear","orange"),1,3)
[1] "app" "pea" "ora"
> str_sub(c("apple","pear","orange"),-3,-1)
[1] "ple" "ear" "nge"

可以使用其赋值形式来修改字符串:

> x<-c("apple","pear")
> str_sub(x,1,1)<-str_to_upper(str_sub(x,1,1))
> x
[1] "Apple" "Pear" 

4.区域设置

一些函数如转换大小写函数在不同国家和地区其规则也不一样,可以使用locale参数设置区域。

区域设置可以参考ISO 639语言编码标准,语言编码是2到3个字母的缩写。

> str_sort(x,locale="en")
[1] "Apple" "Pear" 
> str_sort(x,locale="haw")
[1] "Apple" "Pear" 
> str_sort(x,locale="tr")
[1] "Apple" "Pear"

二、使用正则表达式进行模式匹配str_view/str_view_all

1.基础匹配

最简单的匹配是精确匹配字符串:

> str_view(x,"a")

复杂一点的是使用.,它可以匹配除了换行符以外的任意字符:

> str_view(x,".a.")

 

但是,如果是想匹配一些有特殊含义的字符呢,比如是匹配这个点"."。我们仍然需要转义字符\。但是,由于我们使用字符串来表示正则表达式,所以正则表达式\.的字符串表达式应该是\\.。

> str_view(c("abb","a.c","bef"),"a\\.c")

 

很不方便的是,我们需要使用\\\\四个反斜杠来匹配一个\

> str_view("a\\b","\\\\")

 

字符串里面的第一个\是转义的意思,实际上这个字符串是a\b。 

2.锚点

默认情况下,正则表达式会匹配字符串的任意位置。有时我们需要在正则表达式中设置锚点,以便从R的开头或末尾进行匹配。

^表示从字符串的开头开始匹配。

$表示从字符串的末尾开始匹配。

> x<-c("apple","banana","orange")
> str_view(x,"^a")

> str_view(x,"a$")

 

还可以用\b来匹配单词边界。例如,为了避免匹配到summarize,summary,rowsum等,会使用\bsum\b进行搜索。 

5.字符类与字符选项

\d:匹配任意数字。

\s:匹配任意空白字符。

[abc]:可以匹配a,b或者c。

[^abc]:可以匹配除了a,b,c外的其他字符。

注意,\d,\s在书写时要写作\\d,\\s。

还可以使用逻辑运算符|来匹配多选项,如:


                
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值