52.关于模式匹配的一些函数(二)
2021-09-04 本文已影响0人
心惊梦醒
【上一篇:51.关于模式匹配的一些函数(一)】
【下一篇:53.关于模式匹配的一些函数(三)】
模式匹配和替换相关的函数包含以下几种功能:
1. 确定匹配模式的字符串
2. 找到匹配的位置
3. 提取匹配的内容
4. 用新值替换匹配项
5. 基于匹配拆分字符串
模式匹配示意图
Base R 中的模式匹配函数有:grep, grepl, regexpr, gregexpr, regexec and gregexec,模式替换函数有:sub、gsub。
2. 找到匹配的位置
str_locate()和str_locate_all()函数用来定位pattern在string中的位置,即Locate the position of patterns in a string。其参数很简单,输入是字符向量和pattern:
# 返回一个整数矩阵,字符向量中每个元素中第一个match的位置
# 矩阵的每一行代表字符向量的元素
# 矩阵第一列为开始位置,第二列为结束位置
str_locate(string, pattern)
# 返回一个与输入等长的整数矩阵的列表,字符向量中每个元素中所有match的位置
# 列表每个元素代表字符向量的元素
# 每个元素对应的值为位置信息
str_locate_all(string, pattern)
> fruit <- c("apple", "banana", "pear", "pineapple")
> str_locate(fruit, "$")
start end
[1,] 6 5
[2,] 7 6
[3,] 5 4
[4,] 10 9
> str_locate_all(fruit, "a")
[[1]]
start end
[1,] 1 1
[[2]]
start end
[1,] 2 2
[2,] 4 4
[3,] 6 6
[[3]]
start end
[1,] 3 3
[[4]]
start end
[1,] 5 5
Base R中的regexpr()和gregexpr()函数实现相同的功能。
# 返回值是与输入等长的向量,包含属性:match的开始位置、match长度
# 没有匹配返回-1
regexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
# 记忆:global regular expression?
# 返回值是与输入等长的列表
gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
> regexpr("a",fruit)
[1] 1 2 3 5
attr(,"match.length")
[1] 1 1 1 1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
> gregexpr("a",fruit)
[[1]]
[1] 1
attr(,"match.length")
[1] 1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
[[2]]
[1] 2 4 6
attr(,"match.length")
[1] 1 1 1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
[[3]]
[1] 3
attr(,"match.length")
[1] 1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
[[4]]
[1] 5
attr(,"match.length")
[1] 1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE