4.4 字符串拆分
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
strsplit
函数用于字符串拆分,参数 x 是被拆分的字符串向量,其每个元素都会被拆分,而参数 split 表示拆分的位置,可以用正则表达式来描述位置,拆分的结果是一个列表。
参数 fixed 默认设置 fixed = FALSE
表示正则表达式匹配,而 fixed = TRUE
表示正则表达式的精确匹配或者按文本字符的字面意思匹配,即按普通文本匹配。我们知道按普通文本匹配速度快。
当启用 perl = TRUE
时,由 PCRE_use_JIT
控制细节。perl
参数的设置与 Perl 软件版本有关,如果正则表达式很长,除了正确设置正则表达式,使用 perl = TRUE
可以提高运算速度
参数 useBytes 设置是否按照逐个字节地进行匹配,默认设置为 FALSE,即按照字符而不是字节进行匹配
<- c(as = "asfef", qu = "qwerty", "yuiop[", "b", "stuff.blah.yech")
x # 按字母 e 拆分字符串向量 x
strsplit(x, "e")
## $as
## [1] "asf" "f"
##
## $qu
## [1] "qw" "rty"
##
## [[3]]
## [1] "yuiop["
##
## [[4]]
## [1] "b"
##
## [[5]]
## [1] "stuff.blah.y" "ch"
参数 split 支持通过正则表达式的方式指明拆分位置
# 默认将点号 . 看作一个正则表达式,它是一个元字符,匹配任意字符
strsplit("a.b.c", ".")
## [[1]]
## [1] "" "" "" "" ""
# 这才是按点号拆分
strsplit("a.b.c", ".", fixed = TRUE)
## [[1]]
## [1] "a" "b" "c"
# 或者
strsplit("a.b.c", "[.]")
## [[1]]
## [1] "a" "b" "c"
# 或者转义点号,去掉元字符的特殊意义
strsplit("a.b.c", "\\.")
## [[1]]
## [1] "a" "b" "c"
这里介绍一个将字符串逆序的函数 str_rev
<- function(x)
str_rev sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")
str_rev(c("abc", "Statistics"))
## [1] "cba" "scitsitatS"
为了加深理解,再举几个例子
# 最后一个空字符没有产生
strsplit(paste(c("", "a", ""), collapse="#"), split="#")
## [[1]]
## [1] "" "a"
# 空字符只有有定义的时候才会产生
strsplit("", " ")
## [[1]]
## character(0)
strsplit(" ", " ")
## [[1]]
## [1] ""