如何使用Julia替换字符串中的多个字符

时间:2016-03-03 20:33:03

标签: string replace julia

我基本上是在尝试解决这个问题:http://rosalind.info/problems/revc/

我想用他们的恭维T,G,C,A代替所有出现的A,C,G,T ..换句话说,所有的A将被T替换,所有的C都被G替换等。

我之前使用replace()函数将所有出现的'T'替换为'U',并且希望替换函数将一个字符列表替换为另一个字符列表但我没有'能够使它工作,所以它可能没有那个功能。

我知道我可以使用BioJulia软件包轻松解决这个问题,并使用以下方法解决了这个问题:

# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide
using Bio.Seq
s = dna"AAAACCCGGT"

t = reverse(complement(s))

println("$t")

但我不想依赖包裹。

这是我到目前为止的代码,如果有人可以引导我朝着正确的方向发展,那将是伟大的。

# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide

s = open("nt.txt") # open file containing sequence

t = reverse(s) # reverse the sequence

final = replace(t, r'[ACGT]', '[TGCA]') # this is probably incorrect
# replace characters ACGT with TGCA

println("$final")

1 个答案:

答案 0 :(得分:5)

似乎replace还没有像Bash中的tr那样进行翻译。所以相反,这里有几种使用字典映射的方法(BioJulia包也似乎也使用了字典):

compliments = Dict('A' => 'T', 'C' => 'G', 'G' => 'C', 'T' => 'A')

然后,如果str = "AAAACCCGGT",您可以像这样使用join

julia> join([compliments[c] for c in str])
"TTTTGGGCCA"

另一种方法可能是使用函数和map

function translate(c)
    compliments[c]
end

然后:

julia> map(translate, str)
"TTTTGGGCCA"

字符串是Julia中的可迭代对象;这些方法中的每一个依次读取一个字符c,并将其传递给字典以获取补充字符。 new 字符串是从这些免费字符构建的。

Julia的字符串也是不可变的:你不能在原地交换字符,而是需要构建一个新的字符串。