如何从R中的字符串中查找子字符串?

如何从R中的字符串中查找子字符串?,r,regex,stringi,R,Regex,Stringi,如果我的字符串是DNA序列 x<-"TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG" 请帮我解决我的问题。我相信您的意思是从stringr包中提取所有内容。该函数没有名为regex的参数;您需要模式。一旦你做到了这一点,你就可以使用或|来允许任何序列结束 library(stringr) str_extract_all(x, pattern="ATG.*?(TAA|TGA|TAG)") [[1]] [1] "ATGC

如果我的字符串是DNA序列

x<-"TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG"

请帮我解决我的问题。

我相信您的意思是从
stringr
包中提取所有内容。该函数没有名为
regex
的参数;您需要
模式
。一旦你做到了这一点,你就可以使用或
|
来允许任何序列结束

library(stringr)
str_extract_all(x, pattern="ATG.*?(TAA|TGA|TAG)")
[[1]]
[1] "ATGCAACGAGGGGCATAA" "ATGCCCAAAATCTGA"    "ATGACCGGGTAG"

这里有一种使用
Biostrings

library("Biostrings")

x <- "TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG"

# Get all combinations of substrings starting with "ATG" and ending with "TAA"
library(tidyverse)
df <- expand.grid(start(matchPattern("ATG", x)), end(matchPattern("TAA", x))) %>%
    filter(Var1 < Var2);
ir <- IRanges(df[, 1], df[, 2]);

extractAt(BString(x), IRanges(df[, 1], df[, 2]));
#A BStringSet instance of length 3
#  width seq
#[1]    18 ATGCAACGAGGGGCATAA
#[2]    44 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAA
#[3]    20 ATGCCCAAAATCTGATATAA

从ATG到TAA
。。。到哪个
TAA
?在
ATG
之后可能有许多
TAA
碱基。在ATG之后的TAA,是的,序列中可能有许多TAA,我想将它们全部提取出来。但不仅仅是TAA,还有TAG和TGA,这可能会起作用:
regmatches(x,gregexpr(“(?)但我不希望它只停在TAA,我的问题是,如果它在序列中找到TAA,TGA或TAG并提取它并重复它以检查序列中的更多子字符串,我怎么能让它从ATG开始并停在
library("Biostrings")

x <- "TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG"

# Get all combinations of substrings starting with "ATG" and ending with "TAA"
library(tidyverse)
df <- expand.grid(start(matchPattern("ATG", x)), end(matchPattern("TAA", x))) %>%
    filter(Var1 < Var2);
ir <- IRanges(df[, 1], df[, 2]);

extractAt(BString(x), IRanges(df[, 1], df[, 2]));
#A BStringSet instance of length 3
#  width seq
#[1]    18 ATGCAACGAGGGGCATAA
#[2]    44 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAA
#[3]    20 ATGCCCAAAATCTGATATAA
df <- expand.grid(
    start(matchPattern("ATG", x)),
    unlist(sapply(c("TAA", "TGA", "TAG"), function(ss) end(matchPattern(ss, x))))) %>%
    filter(Var1 < Var2);
ir <- IRanges(df[, 1], df[, 2]);

extractAt(BString(x), IRanges(df[, 1], df[, 2]));
# [1]    18 ATGCAACGAGGGGCATAA
# [2]    44 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAA
# [3]    20 ATGCCCAAAATCTGATATAA
# [4]    39 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGA
# [5]    15 ATGCCCAAAATCTGA
# ...   ... ...
# [7]    23 ATGCCCAAAATCTGATATAATGA
# [8]     4 ATGA
# [9]    55 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG
#[10]    31 ATGCCCAAAATCTGATATAATGACCGGGTAG
#[11]    12 ATGACCGGGTAG