Python3〜正規表現を使った文字列の置換

スポンサーリンク

バイオインフォマティクスの分野で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モジュールを使いこなすことで、より効率的なデータ処理が可能になります。ぜひ、正規表現を活用してバイオインフォマティクスのデータ解析をよりスムーズに行ってみてください。

タイトルとURLをコピーしました