一、字符串基础
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。
还可以使用逻辑运算符|来匹配多选项,如: