在许多其他字符串之间获取字符串[R]



这里我想提取字符串部分"wanted1part";。我可以这样做:

string <- "foo_bar_doo_xwanted1part_more_junk"
gsub("\_.*", "", gsub(".*?_x", "", string))
#> [1] "wanted1part"

但我希望也许有人能提出一个单一的解决方案?

如果您想继续使用gsub,您可以使用在替换中反向引用的捕获组:

gsub('^.+_x(\w+?)_.+$', '\1', string, perl = TRUE)

这里的关键是让模式与整个字符串匹配,但要有一个捕获组,使用括号指定,与要保留的字符串部分匹配。这群人,在这里";(\\w+?(";,然后当我们在替换中引用整个字符串时,可以替换它。

我发现使用stringr中的str_extract可以使这类事情变得更容易,因为它可以避免使用捕获组。

library(stringr)
str_extract(string, '(?<=_x)\w+?(?=_)')

在这里,我使用lookahead和lookbacking来识别我们想要提取的字符串部分。

最新更新