代码之家  ›  专栏  ›  技术社区  ›  Sati

str_extract只捕获重复关键字的一个实例

  •  2
  • Sati  · 技术社区  · 6 年前

    当我使用 str_extract() 在包含某个关键字的重复实例的字符串上,它只捕获其中一个。

    > str_extract("1234cAc5678cAc90123", ".....A.....")
    [1] "1234cAc5678"
    

    1. 选择一个而不是另一个的标准是什么?(即“5678cAc9012”)
    2. 无论字符串是否重叠,如何在每次出现R提取实例时都生成R提取实例?

    当字符串不重叠时,str\u extract\u都给出了2个实例,这意味着str\u extract只捕获循环字符串的第一个实例。

    > str_extract_all("1234cAc5678cAc90123", "...A...")
    [[1]]
    [1] "34cAc56" "78cAc90"
    

    是否有任何其他功能可以显示所有事件,即使它们重叠,例如:

    [1] "1234cAc5678"
    [2] "5678cAc9012"
    

    甚至是这样:

    > str_extract("0123A456A7890", "....A....")
    [1] "0123A456A"
    [2] "A456A7890"
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   akrun    6 年前

    如果我们正在寻找重叠匹配,那么使用 stri_match_all

    library(stringi)
    stri_match_all_regex(str1, "(?=(.{5}A.{5}))")[[1]][,2]
    #[1] "1234cAc5678" "5678cAc9012"
    

    或者如果我们正在使用 stringr stringi ,然后使用 str_match_all

    str_match_all(str1, "(?=(.{5}A.{5}))")[[1]][,2]
    #[1] "1234cAc5678" "5678cAc9012"
    
    str_match_all("0123A456A7890", "(?=(.{4}A.{4}))")[[1]][,2]
    #[1] "0123A456A" "A456A7890"
    

    数据

    str1 <- "1234cAc5678cAc90123"