在R中提取字符串中模式后的n个字符

cunj1qz1  于 2023-03-27  发布在  其他
关注(0)|答案(3)|浏览(158)

我有一个长字符串,其中包含多个模式示例。我希望在模式之后有n个字符。假设我的字符串是"quick fox jumps over the lazy dog",我希望在每个"u"之后有两个字符。也就是说,我希望输出一个向量c("ic", "mp")。我怎么做?
谢谢!

ddarikpa

ddarikpa1#

我们可以使用str_extract_all-创建一个函数(参数为字符串,n-字符数,after和chr-字符匹配

library(stringr)
f1 <- function(string, n, chr)
{
pat <- sprintf("(?<=%s)%s", chr, strrep(".", n))
str_extract_all(string, pat)[[1]]
}
  • 测试
> f1(str1, 2, "u")
[1] "ic" "mp"
> f1(str1, 3, "u")
[1] "ick" "mps"

数据

str1 <- "quick fox jumps over the lazy dog"
kq0g1dla

kq0g1dla2#

类似,但使用str_extract_allpaste0
关键点:(?<=)是一个lookbehind,它匹配模式,但不包括它在提取的字符串中。
.{n}匹配模式后的下一个n字符。

library(stringr)

n <- 2
str_extract_all(string, paste0("(?<=", "u", ").{", n, "}"))[[1]]

[1] "ic" "mp"
a8jjtwal

a8jjtwal3#

下面是使用regmatches + gregexpr的基本R选项,沿着模式"(?<=u)[a-zA-Z]{2}"

> regmatches(s, gregexpr("(?<=u)[a-zA-Z]{2}", s, perl = TRUE))[[1]]
[1] "ic" "mp"

相关问题