美文网首页
52.关于模式匹配的一些函数(二)

52.关于模式匹配的一些函数(二)

作者: 心惊梦醒 | 来源:发表于2021-09-04 07:54 被阅读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.关于模式匹配的一些函数(三)】

    相关文章

      网友评论

          本文标题:52.关于模式匹配的一些函数(二)

          本文链接:https://www.haomeiwen.com/subject/kfefwltx.html