我有一个长字符串,其中包含多个模式示例。我希望在模式之后有n个字符。假设我的字符串是"quick fox jumps over the lazy dog",我希望在每个"u"之后有两个字符。也就是说,我希望输出一个向量c("ic", "mp")。我怎么做?谢谢!
"quick fox jumps over the lazy dog"
"u"
c("ic", "mp")
ddarikpa1#
我们可以使用str_extract_all-创建一个函数(参数为字符串,n-字符数,after和chr-字符匹配
str_extract_all
n
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"
kq0g1dla2#
类似,但使用str_extract_all和paste0:关键点:(?<=)是一个lookbehind,它匹配模式,但不包括它在提取的字符串中。.{n}匹配模式后的下一个n字符。
paste0
(?<=)
.{n}
library(stringr) n <- 2 str_extract_all(string, paste0("(?<=", "u", ").{", n, "}"))[[1]] [1] "ic" "mp"
a8jjtwal3#
下面是使用regmatches + gregexpr的基本R选项,沿着模式"(?<=u)[a-zA-Z]{2}":
regmatches
gregexpr
"(?<=u)[a-zA-Z]{2}"
> regmatches(s, gregexpr("(?<=u)[a-zA-Z]{2}", s, perl = TRUE))[[1]] [1] "ic" "mp"
3条答案
按热度按时间ddarikpa1#
我们可以使用
str_extract_all
-创建一个函数(参数为字符串,n
-字符数,after和chr
-字符匹配数据
kq0g1dla2#
类似,但使用
str_extract_all
和paste0
:关键点:
(?<=)
是一个lookbehind,它匹配模式,但不包括它在提取的字符串中。.{n}
匹配模式后的下一个n
字符。a8jjtwal3#
下面是使用
regmatches
+gregexpr
的基本R选项,沿着模式"(?<=u)[a-zA-Z]{2}"
: