バイオインフォマティクスの分野でPython3を活用する際、データ解析やデータ操作の効率化を図るためのスキルが重要です。その中でも「正規表現を使った文字列の置換」は、DNA配列や遺伝子名のフォーマット変更、パターン検索など、様々な場面で非常に役立ちます。この記事では、Python3を使用した正規表現の基本から、応用的な文字列置換の使い方について詳しく解説します。
1. 正規表現とは?
正規表現(Regular Expression、略してRegex)は、文字列のパターンを定義し、そのパターンにマッチする部分を検索・抽出・置換するための方法です。バイオインフォマティクスでは、例えばDNAやRNAの配列の中から特定のモチーフを見つけたり、配列データのフォーマットを整えたりするのに利用します。Pythonでは、標準ライブラリのre
モジュールを使用して正規表現を扱うことができます。
2. Python3での正規表現の基本操作
まずは、Python3での正規表現の基本的な使い方を見ていきましょう。
reモジュールのインポート
正規表現を使うには、Pythonのre
モジュールをインポートします。
import re
基本的な置換の方法
文字列の置換を行う場合、re.sub()
関数を使用します。re.sub()
は以下のように使います。
re.sub(正規表現パターン, 置換後の文字列, 対象の文字列)
例えば、DNA配列中のアデニン(A)をチミン(T)に置換したい場合は、以下のようにします。
dna_sequence = "ATGCCGAAT"
replaced_sequence = re.sub(r"A", "T", dna_sequence)
print(replaced_sequence)
この例では、r"A"
という正規表現パターンを用いて、AをTに置き換えています。
よく使う正規表現のパターン
正規表現には、以下のような便利なパターンがあります。
.
: 任意の1文字にマッチ^
: 文字列の先頭にマッチ$
: 文字列の末尾にマッチ\d
: 任意の数字にマッチ\w
: 任意の英数字にマッチ[A-Z]
: AからZまでの文字にマッチ+
: 直前の文字が1回以上繰り返される部分にマッチ*
: 直前の文字が0回以上繰り返される部分にマッチ
これらを組み合わせることで、複雑なパターンを表現できます。
3. バイオインフォマティクスでの応用例
ここでは、バイオインフォマティクスの実際の作業で役立つ、正規表現を使った文字列の置換の応用例を紹介します。
例1: DNA配列の変換(逆相補鎖の生成)
DNA配列の解析では、しばしば逆相補鎖(リバースコンプリメント)を取得する必要があります。正規表現を使って置換を行うことで、簡単に逆相補鎖を生成することができます。
def reverse_complement(sequence):
# 各塩基の置換を定義
complement_dict = {"A": "T", "T": "A", "C": "G", "G": "C"}
# 置換を行い、逆順にしてリバースコンプリメントを作成
complement = re.sub(r"A|T|C|G", lambda x: complement_dict[x.group()], sequence)
return complement[::-1]
dna_sequence = "ATGCCGAAT"
print(reverse_complement(dna_sequence))
この例では、辞書complement_dict
を使って各塩基を逆相補鎖に変換し、さらに[::-1]
を使って文字列を逆順にしています。re.sub()
関数の第2引数にlambda
を使うことで、マッチした文字を動的に置換しています。
例2: FASTA形式のIDのフォーマット変更
バイオインフォマティクスでは、FASTA形式で配列データを扱うことが多いです。FASTAのIDを統一するために、特定の文字列を置換したい場合もあります。例えば、IDの中に含まれる「|」を「_」に置き換える例です。
fasta_id = "sp|P12345|Some_protein_name"
formatted_id = re.sub(r"\|", "_", fasta_id)
print(formatted_id)
ここでは、re.sub()
を使って「|」を「_」に置き換えています。このように、特定の文字や記号を別の形式に変換することは、データの整理に役立ちます。
例3: パターン検索による配列のフィルタリング
特定のパターンを含む配列をリストから抽出したい場合にも、正規表現を使った置換が有効です。例えば、「ATG」で始まり「TGA」で終わる配列を抽出する例です。
sequences = ["ATGCGATGA", "TTGATGCGT", "ATGCTTGA", "CGTATGCAA"]
pattern = re.compile(r"^ATG.*TGA$")
filtered_sequences = [seq for seq in sequences if pattern.match(seq)]
print(filtered_sequences)
この例では、re.compile()
で正規表現を事前にコンパイルし、pattern.match()
を使って配列をフィルタリングしています。パターンは、^ATG
で「ATG」で始まること、.*
で任意の文字が0回以上続くこと、TGA$
で「TGA」で終わることを表現しています。
4. 応用テクニック: 正規表現のグループと置換
正規表現のグループを使うと、マッチした部分を再利用して置換を行うことができます。例えば、配列の部分を特定の形式に変換する場合に有効です。
グループを使った例
以下は、特定のパターンにマッチした部分を強調表示する例です。
sequence = "ATGCGATGA"
highlighted = re.sub(r"(ATG)", r"[\1]", sequence)
print(highlighted)
この例では、(ATG)
で「ATG」をグループとしてキャプチャし、置換の際に\1
でそのグループを再利用しています。これにより、マッチした部分を「[]」で囲むことができます。
5. まとめ
正規表現を使った文字列の置換は、バイオインフォマティクスにおいて強力なツールです。基本的な使い方を押さえた上で、DNA配列の逆相補鎖の生成やデータのフォーマット変更、特定のパターンを含む配列の抽出など、実際のデータ解析に応用することができます。Python3のre
モジュールを使いこなすことで、より効率的なデータ処理が可能になります。ぜひ、正規表現を活用してバイオインフォマティクスのデータ解析をよりスムーズに行ってみてください。