【上一篇:53.关于模式匹配的一些函数(三)】
【下一篇:55.关于正则表达式在其他函数中的应用】
模式匹配和替换相关的函数包含以下几种功能:
1. 确定匹配模式的字符串
2. 找到匹配的位置
3. 提取匹配的内容
4. 用新值替换匹配项
5. 基于匹配拆分字符串
4. 用新值替换匹配项
str_replace()和str_replace_all()函数可实现这个功能。
str_replace(string, pattern, replacement)
str_replace_all(string, pattern, replacement)
replacement指定新值,长度为1或者长度与string或pattern的向量。
对str_replace_all()函数,可设置c(pattern1 = replacement1)向量实现string 向量中每个元素的替换。
replacement还可以用反引用的方式实现match内容的重复或交换位置。
5. 基于匹配拆分字符串
str_split()和str_split_fixed()函数用来拆分字符串。
str_split(string, pattern, n = Inf, simplify = FALSE)
str_split_fixed(string, pattern, n)
str_split()返回一个与输入等长的list;str_split_fixed()返回一个矩阵。
参数n指定返回向量的长度,对str_split_fixed()函数来说,如果n>实际拆分后的长度,则多余位置用NA填充。
simplify=TRUE表示返回一个矩阵。
对pattern来讲,还可以指定用character、line、sentence 和word拆分,需要通过boundary()函数实现。boundary()函数是使用修饰函数控制匹配行为类函数中的一个,其他还有fixed()、regex()、coll()。boundary()的意思是匹配事物之间的边界。
boundary(type = c("character", "line_break", "sentence", "word"),
skip_word_none = NA, ...)
type参数指定将哪种类型视为边界,例如
character:认为每个character是一个边界,所以返回的边界值就是每个character本身
其他同理。
x <- "This is a sentence. This is another sentence."
str_view_all(x, boundary("word"))
regex()的意思是使用ICU正则表达式,这是正则匹配的默认行为。
regex(pattern, ignore_case = FALSE, multiline = FALSE,
comments = FALSE, dotall = FALSE, ...)
ignore_case:忽略大小写
multiline:如果为TRUE, $和^匹配每行的开头和结尾。如果默认值为FALSE,则只匹配输入的开始和结束。
comments:如果为TRUE,空格和以#开头的注释将被忽略。用\转义文字空格。
fixed()的意思是比较字符串中的litaral字节。这是非常快的,但对于非ascii字符集来说通常不是这样。
fixed(pattern, ignore_case = FALSE)
coll()的意思是Compare strings respecting standard collation rules.。collation有"校对"的意思。可以理解为通过指定locale参数,coll()函数直接按照某种语言规则解析pattern,所以速度会比fixed()快。
coll(pattern, ignore_case = FALSE, locale = "en", ...)
网友评论