2014-09-27 174 views
2

我有三个文件包含一组字符串。 File1和File2包含File3的子字符串。我想从File3中减去位于File1和File2中子字符串之间的字符串。请参考下面我的例子:提取部分匹配两个子字符串的字符串

File1中(子串1):

head(fivep$V2) 
[1] UGAGGUAGUAGUUUGUACAGUU UGAGGUAGUAGUUUGUGCUGUU ACAUACUUCUUUAUAUGCCCAUA UAGCAGCACAUCAUGGUUUACA 
[5] GGGUUCCUGGCAUGCUGAUUU AGAGCUUAGCUGAUUGGUGAAC 

文件2(子串2)

head(threep$V2) 
[1] ACUGUACAGGCCACUGCCUUGC CUGCGCAAGCUACUGCCUUGCU UGGAAUGUAAAGAAGUAUGUAU CGAAUCAUUAUUUGCUGCUCUA 
[5] AUCACAUUGCCAGGGAUUACC UUCACAGUGGCUAAGUUCUGC 

文件3

head(hairpin$V2) 
[1] UACACUGUGGAUCCGGUGAGGUAGUAGGUUGUAUAGUUUGGAAUAUUACCACCGGUGAACUAUGCAAUUUUCUACCUUACCGGAGACAGAACUCUUCGA 
[2] AUGCUUCCGGCCUGUUCCCUGAGACCUCAAGUGUGAGUGUACUAUUGAUGCUUCACACCUGGGCUCUCCGGGUACCAGGACGGUUUGAGCAGAU  
[3] AAAGUGACCGUACCGAGCUGCAUACUUCCUUACAUGCCCAUACUAUAUCAUAAAUGGAUAUGGAAUGUAAAGAAGUAUGUAGAACGGGGUGGUAGU 
[4] UAAACAGUAUACAGAAAGCCAUCAAAGCGGUGGUUGAUGUGUUGCAAAUUAUGACUUUCAUAUCACAGCCAGCUUUGAUGUGCUGCCUGUUGCACUGU 
[5] CGGACAAUGCUCGAGAGGCAGUGUGGUUAGCUGGUUGCAUAUUUCCUUGACAACGGCUACCUUCACUGCCACCCCGAACAUGUCGUCCAUCUUUGAA 
[6] UCUCGGAUCAGAUCGAGCCAUUGCUGGUUUCUUCCACAGUGGUACUUUCCAUUAGAACUAUCACCGGGUGGAAACUAGCAGUGGCUCGAUCUUUUCC 

实施例:

        String in File1      String in File2 
           AGGGCUUAGCUGCUUGUGAGCA     UUCACAGUGGCUAAGUUCCGC 
String in File3  CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG 
从这个例子

输出:

GGGUCCACACCAAGUCGUG 
+0

这两个子串是什么? – 2014-09-27 18:08:22

+0

将你的代码放在这里,然后我们可以看看你正在面对的问题。 – Praveen 2014-09-27 18:08:33

回答

1

使用qdapRegex在R:

f1 <- "AGGGCUUAGCUGCUUGUGAGCA" 
f2 <- "UUCACAGUGGCUAAGUUCCGC" 
f3 <- "CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG" 

library(qdapRegex) 
rm_between(f3, f1, f2, extract=TRUE) 

## [[1]] 
## [1] "GGGUCCACACCAAGUCGUG" 

顾名思义rm_between移除或抓住左,右边界之间的项目。使用extract = TRUE来获取边界之间的字符串。返回的值是一个列表,因为每个字符串可能有多个提取。如果不需要,则使用unlist,如unlist(rm_between(f3, f1, f2, extract=TRUE))

2

这里的R中的溶液:

file1 <- "AGGGCUUAGCUGCUUGUGAGCA" 
file2 <- "UUCACAGUGGCUAAGUUCCGC" 
file3 <- "CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG" 

# create a regular expression 
pattern <- paste0(".*", file1, "(.*)", file2, ".*") 

# extract the substring 
sub(pattern, "\\1", file3) 
# [1] "GGGUCCACACCAAGUCGUG" 
+0

如果文件包含多个字符串,这将如何工作? – user3741035 2014-09-27 20:51:43

+0

@ user3741035是否要在文件1和文件2中使用字符串的所有组合? – 2014-09-28 06:50:49

+0

是的,所有的组合。 – user3741035 2014-09-28 06:56:25

1

python

>>> a='AGGGCUUAGCUGCUUGUGAGCA' 
>>> b='UUCACAGUGGCUAAGUUCCGC' 
>>> c='CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG' 
>>> regex = a + '(.*?)' + b 
>>> regex 
'AGGGCUUAGCUGCUUGUGAGCA(.*?)UUCACAGUGGCUAAGUUCCGC' 
>>> re.findall(regex,c) 
['GGGUCCACACCAAGUCGUG'] 
1

尝试此与gsubfn strapplyc。我们假设s1s2只有一个实例,或者如果有多个实例需要在s1的第一个实例和最后一个实例s2之间的字符串。如果可能有多个实例,并且您希望有不同的东西,请将其添加到问题中。

s1 <- "AGGGCUUAGCUGCUUGUGAGCA" 
s2 <- "UUCACAGUGGCUAAGUUCCGC" 
s3 <- "CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG" 

library(gsubfn) 
fn$strapplyc(s3, "$s1(.*)$s2", simplify = TRUE) 
## [1] "GGGUCCACACCAAGUCGUG" 
+0

我编辑了我的问题。我在文件1,2和3中有多个字符串。 – user3741035 2014-09-27 20:56:33

1

在蟒蛇
`

 
    string1 = "AGGGCUUAGCUGCUUGUGAGCA" 
    string2 = "UUCACAGUGGCUAAGUUCCGC" 
    string_main = "CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG" 
    print string_main[string_main.find(string1)+len(string1):string_main.find(string2)]

4

在Perl中,你可以试试这个代码:

use strict; 
use warnings; 

my $file1 = "AGGGCUUAGCUGCUUGUGAGCA"; 
my $file2 = "UUCACAGUGGCUAAGUUCCGC"; 
my $file3 = "CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG"; 

my ($result) = $file3 =~ /$file1(.*?)$file2/; 

print $result; 

输出:

GGGUCCACACCAAGUCGUG 
1

基于把你给定的输入,下面的工作。

f1 <- "AGGGCUUAGCUGCUUGUGAGCA" 
f2 <- "UUCACAGUGGCUAAGUUCCGC" 
f3 <- "CUGAGGAGCAGGGCUUAGCUGCUUGUGAGCAGGGUCCACACCAAGUCGUGUUCACAGUGGCUAAGUUCCGCCCCCCAG" 
strsplit(f3, paste(f1, f2, sep='|'))[[1]][2] 
# [1] "GGGUCCACACCAAGUCGUG"