2014-09-27 171 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"