Python は文字列の結合、切り出し、置換、正規表現による検索や後方参照などをサポートしている。正規表現による検索を行う場合は、re モジュールをインポートする必要がある。
文字列の結合
2 つの文字列の結合して、1 つの文字列にするとき、+
を用いる。
dna_1 = 'AGCTACGTAGTATT'
dna_2 = 'ATGCTAGCAAATATATAAAA'
dna = dna_1 + dna_2
print(dna)
## AGCTACGTAGTATTATGCTAGCAAATATATAAAA
リストの要素を結合して 1 つの文字列のする場合は join
メソッドを用いる。その場合、2 つの文字列を結合する場合、どんな文字を利用して結合するのかを指定することができる。
dna = ['AGCTACGTAGTATT', 'ATGCTAGCAAATATATAAAA']
dna_str = '-'.join()
print(dna_str)
## AGCTACGTAGTATT-ATGCTAGCAAATATATAAAA
dna_str = ''.join()
print(dna_str)
## AGCTACGTAGTATTATGCTAGCAAATATATAAAA
文字列の切り出し
文字列のスライスはインデックスを指定して行う。Python では、1 文字目の文字列の左側が 0 となっている。
dna = 'AAACCCGGGTTT'
print(dna[0:3])
## 'AAA'
print(dna[3:])
## 'CCCGGGTTT'
print(dna[:3])
## 'AAA'
print(dna[-3:])
## 'TTT'
文字列の置換
文字列の置換は replace
を用いる。
dna = 'AGACXGTAXCGXTA'
dna_mod = dna.replace('X', 'C')
print(dna_mod)
## 'AGACCGTACCGCTA'
dna_mod = dna.replace('X', "C', 2)
print(dna_mod)
## 'AGACCGTACCGXTA'
高度な文字列置換は、正規表現を利用する。正規表現を利用する場合は、re
モジュールをインポートする必要がある。
import re
dna = 'AAAAXAAACCCXCCCAAXAGGGTTTT'
pattern = re.compile("AXA")
dna_mod = pattern.sub('CCC', dna)
print(dna_mod)
## 'AAACCCAACCCXCCCACCCGGGTTTT'
dna = 'AAGCAGTXCXGAGCAGXTXAGXTXA'
pattern = re.compile("X(.)X")
dna_mod = pattern.sub(r"C\1C", dna)
print(dna_mod)
## 'AAGCAGTCCCGAGCAGCTCAGCTCA'
文字列の分割
文字列を空白あるいはカンマなどで分割してリストにするとき、split
を利用する。
dna = 'ACAGTGTATGCCTGCTATGCAGTCGTA'
arr = dna.split('ATG')
for i in arr:
print(i)
## ACAGTGT
## CCTGCT
## CAGTCGTA
逆に、リストの各要素を繋げる時に join
メソッドを利用する。
dna = 'ACAGTGTATGCCTGCTATGCAGTCGTA'
arr = dna.split('ATG')
dna_str = "-".join(arr)
print(dna_str)
## ACAGTGT-CCTGCT-CAGTCGTA
dna_str = "".join(arr)
print(dna_str)
## ACAGTGTCCTGCTCAGTCGTA
文字列検索
文字列の中に特定の語句を含むかどうかを検索する関数は find
と rfind
がある。find
は文字列の先頭から検索するのに対し、rfind
は文字列の後尾から検索する。該当語句が見つかった場合、その開始位置が返される。見つからなかった場合、-1
を返す。
# 012345678901234567890123456789012
# TAC TAC
dna = 'CATTGTACGTCGCGTAGCCATGTACGTCGCAGT'
s = dna.find('TAC')
print(s)
## 5
e = dna.rfind('TAC')
print(e)
## 22
n = dna.find("XXX")
print(n)
## -1
正規表現によるパターン検索が行える。re モジュールを呼び出して行う。
import re
dna = 'CATTGTACGTCGCGTAGCCATGTACGTCGCAGT'
pTXC = re.compile("T.C")
m = pTXC.search(dna, 0)
if m:
print (m.start())
print (m.end())
## 5
## 8
上の例では、最初の一つだけが検索できる。すべてのパターンを検索する場合は、while
文を利用して、検索開始位置をずらしながら行う。
import re
dna = 'CATTGTACGTCGCGTAGCCATGTACGTCGCAGT'
pTXC = re.compile("T.C")
i = 0
while i >= 0:
m = pTXC.search(dna, i)
if m:
print(m.start())
print(m.end())
i = m.start() + 1
else:
break
## 5
## 8
## 22
## 25
後方参照
正規表現を利用してパターンマッチングを行い、その後方参照を行う場合は、パターンを作成するときに参照部分を括弧で囲む。後方参照の際に .group
メソッドで参照する。
import re
dna = 'AGCGAGCCCAAGCTATGCTATTTAGCATTTCGATAAGTCGATGCTAAAAATA'
pattern = re.compile("(GCCC.+TAAA)")
m = pattern.search(dna)
if m:
print(m.group(0))
print(m.start())
print(m.end())
## 'GCCCAAGCTATGCTATTTAGCATTTCGATAAGTCGATGCTAAA'
## 5
## 48
pattern = re.compile("GCC(.+)TATTT(.+)TTTC")
m = pattern.search(dna)
if m:
print(m.group(0))
print(m.group(1))
## 'GCCCAAGCTATGCTATTTAGCATTTC'
## 'CAAGCTATGC'