我被困在正则表达式中。 我通常使用这行代码来查找字符串中重叠的重复:
gregexpr("(?=ATGGGCT)",text,perl=TRUE)
[[1]]
[1] 16 45 52 75 203 210 266 273 327 364 436 443 480 506 534 570 649
attr(,"match.length")
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
attr(,"useBytes")
[1] TRUE
现在我想给gregexpr
一个包含在变量中的模式:
x="GGC"
当然如果我传递变量x
,gregexpr
将搜索"x"
而不是变量包含的内容
gregexpr("(?=x)",text,perl=TRUE)
[[1]]
[1] -1
attr(,"match.length")
[1] -1
attr(,"useBytes")
[1] TRUE
在这种积极展望的情况下,如何将变量传递给gregexpr
?
答案 0 :(得分:5)
我会使用sprintf
功能:
x <- "AGA"
text <- "ACAGAGACTTTAGATAGAGAAGA"
gregexpr(sprintf("(?=%s)", x), text, perl=TRUE)
## [[1]]
## [1] 3 5 12 16 18 21
## attr(,"match.length")
## [1] 0 0 0 0 0 0
## attr(,"useBytes")
## [1] TRUE
sprintf
将%s
的出现次数替换为x
的值。
答案 1 :(得分:4)
您可以使用paste(x, sep="")
...
paste0
x <- "GGC"
text <- 'ATGGGCTATGGGCTATGGGCTATGGGCT'
gregexpr(paste0('(?=', x, ')'), text, perl=TRUE)
# [[1]]
# [1] 4 11 18 25
# attr(,"match.length")
# [1] 0 0 0 0
# attr(,"useBytes")
# [1] TRUE
如果您想访问重叠的匹配项,请查看Overlapping matches in R
答案 2 :(得分:3)
gsubfn包中的fn$
前缀支持字符串插值:
library(gsubfn)
# test data
text <- "ATGGGCTAAATGGGCT"
x <- "GGGC"
fn$gregexpr("(?=$x)", text, perl = TRUE)
请参阅?fn
,gsubfn home page和gsubfn小插图,vignette("gsubfn")
。
答案 3 :(得分:0)
好吧我用这种方式解决了它:
text="ATGGGCTAAATGGGCT"
x="GGC"
c=paste("(?=",x,")",sep="")
r=gregexpr(c,text,perl=TRUE)