从R中的字符串中提取模式的多个实例

Cro*_*ops 9 regex r

我有一个字符向量t如下.

t <- c("GID456 SPK711", "GID456 GID667 VINK", "GID45345 DNP990 GID2345", 
    "GID895 GID895 K350")
Run Code Online (Sandbox Code Playgroud)

我想提取所有以GID开头的字符串,然后是一系列数字.

这可以,但不检索多个实例.

gsub(".*(GID\\d+).*", "\\1", t)
[1] "GID456"  "GID667"  "GID2345" "GID895" 
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何提取所有字符串?所需的输出如下

out <- c("GID456", "GID456", "GID667", "GID45345", "GID2345", 
        "GID895", "GID895")
Run Code Online (Sandbox Code Playgroud)

Tyl*_*ker 11

这是一种使用包维护qdapRegex(我更喜欢这个或stringi/stringr)的方法,以确保一致性和易用性.我还展示了一种基本方法.无论如何,我认为这更像是一个"提取"问题,而不是一个问题.

y <- c("GID456 SPK711", "GID456 GID667 VINK", "GID45345 DNP990 GID2345", 
    "GID895 GID895 K350")

library(qdapRegex)
unlist(ex_default(y, pattern = "GID\\d+"))

## [1] "GID456"   "GID456"   "GID667"   "GID45345" "GID2345"  "GID895"   "GID895" 
Run Code Online (Sandbox Code Playgroud)

在基地R:

unlist(regmatches(y, gregexpr("GID\\d+", y)))
Run Code Online (Sandbox Code Playgroud)