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

时间:2017-10-04 04:56:37

标签: r regex string text-extraction stringr

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

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

我有两个问题:

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

    str_extract_all给出了2个实例,这意味着str_extract只捕获重复字符串的第一个实例。

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

    是否有任何其他功能可以显示所有出现的情况,即使它们重叠,如下所示:

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

    甚至这个:

    > str_extract("0123A456A7890", "....A....")
    [1] "0123A456A"
    [2] "A456A7890"
    

1 个答案:

答案 0 :(得分:3)

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

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

或者,如果我们使用调用stringr的{​​{1}},则使用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"