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

【上一篇:51.关于模式匹配的一些函数(一)】
【下一篇:53.关于模式匹配的一些函数(三)】

上一篇下一篇

猜你喜欢

热点阅读