Python
 Computer >> コンピューター >  >> プログラミング >> Python

【初心者向け】Pythonでテキストを検索・置換する方法を徹底解説

文字列の中から特定のテキストパターンを検索したり、別の文字列に置き換えたりしたい場面は、Pythonプログラミングで非常によくあります。本記事では、単純な文字列操作から正規表現を使った高度な処理まで、具体的なコード例とともにわかりやすく解説します。

基本的な考え方

検索・置換の方法は、扱うパターンの複雑さによって使い分けるのがポイントです。

  • 単純な固定文字列の場合str.replace() メソッドが最適な解決策です。
  • 複雑なパターンの場合re モジュール(正規表現)を活用します。

サンプルテキストの準備

まず、動作確認用のサンプルテキストを作成しましょう。

def sample():
    yield 'Is'
    yield 'USA'
    yield 'Colder'
    yield 'Than'
    yield 'Canada?'

text = ' '.join(sample())
print(f"Output \n {text}")

出力:

Is USA Colder Than Canada?

テキストの検索方法

完全一致の確認

文字列全体が指定したテキストと一致するかどうかは、比較演算子 == で確認できます。

# 完全一致するかどうかを確認
print(f"Output \n {text == 'USA'}")

出力:

False

text は「USA」だけではないため、False が返されます。

基本的な文字列メソッドによる検索

Pythonには、str.find()str.endswith()str.startswith() といった便利な文字列メソッドが用意されています。

前方一致の確認(startswith)

# テキストが「Is」で始まるかどうか
print(f"Output \n {text.startswith('Is')}")

出力:

True

後方一致の確認(endswith)

# テキストが「Canada?」で終わるかどうか
print(f"Output \n {text.endswith('Canada?')}")

出力:

True

部分文字列の位置を検索(find)

# find()で「USA」の位置を検索
print(f"Output \n {text.find('USA')}")

出力:

3

find() は、見つかった位置のインデックス(0始まり)を返します。「USA」は4番目の単語なので、インデックス3に存在します。見つからない場合は -1 が返される点にも注意してください。

正規表現による高度な検索

検索したいパターンがより複雑な場合は、正規表現と re モジュールを使用します。

たとえば、「dd/mm/yyyy 形式の日付が含まれているか」をチェックしてみましょう。

# 文字列形式の日付を作成
date1 = '22/10/2020'

# \d+ は「1桁以上の数字」にマッチする
import re
if re.match(r'\d+/\d+/\d+', date1):
    print('yes')
else:
    print('no')

出力:

yes

re.match() は、文字列の先頭がパターンにマッチするかどうかを判定します。途中に含まれている場合のみマッチさせたいときは、re.search() を使うのが適切です。

テキストの置換方法

単純な置換:str.replace()

置換対象のテキストと置換後の文字列がシンプルな場合は、str.replace() を使います。

print(f"Output \n {text.replace('USA', 'Australia')}")

出力:

Is Australia Colder Than Canada?

複雑なパターンの置換:re.sub()

複雑なパターンを検索して置換する場合は、re モジュールの sub() メソッドを活用します。

sub() の構文は次のとおりです。

  • 第1引数:マッチさせたいパターン
  • 第2引数:置換後のパターン
  • 第3引数:処理対象の文字列

以下の例では、dd/mm/yyyy 形式の日付を検出し、yyyy-dd-mm 形式へ変換しています。バックスラッシュ付きの数字(\3 など)は、パターン内のキャプチャグループ番号を参照することに注意してください。

import re
sentence = 'Date is 22/11/2020. Tomorrow is 23/11/2020.'
# 日付部分を yyyy-dd-mm 形式に置換
replaced_text = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', sentence)
print(f"Output \n {replaced_text}")

出力:

Date is 2020-22-11. Tomorrow is 2020-23-11.

パターンの事前コンパイルでパフォーマンス向上

同じパターンを何度も繰り返し使う場合は、あらかじめ re.compile() で正規表現をコンパイルしておくと、処理速度が向上します。

pattern = re.compile(r'(\d+)/(\d+)/(\d+)')
replaced_pattern = pattern.sub(r'\3-\1-\2', sentence)
print(f"Output \n {replaced_pattern}")

出力:

Date is 2020-22-11. Tomorrow is 2020-23-11.

置換回数を取得する:re.subn()

re.subn() を使うと、テキストを置換すると同時に、置換が行われた回数も取得できます。

output, count = pattern.subn(r'\3-\1-\2', sentence)
print(f"Output \n {output}")

出力:

Date is 2020-22-11. Tomorrow is 2020-23-11.
print(f"Output \n {count}")

出力:

2

この例では文中に2つの日付が存在したため、置換回数は 2 となっています。

まとめ

用途に応じて、次のようにメソッドを使い分けましょう。

用途推奨メソッド
単純な文字列の置換str.replace()
前方一致・後方一致の確認str.startswith() / str.endswith()
部分文字列の位置検索str.find()
複雑なパターンの検索re.match() / re.search()
複雑なパターンの置換re.sub() / re.subn()

正規表現を組み合わせれば、日付や電話番号など、柔軟なパターン処理も簡単に実装できます。ぜひ実際のコードで試してみてください。

  1. Windows 10のメモ帳でテキストを検索・置換する方法

    メモ帳で特定の単語やフレーズを検索して置き換えたい場合、このステップバイステップガイドを参考にすれば、Windows 10の標準搭載アプリ「メモ帳」でテキストの検索と置換が簡単に行えます。複数の単語やフレーズをまとめて処理することも可能です。 無料のテキストエディタの中には、こうした機能をより便利に使えるものもありますが、Windowsに最初から入っているメモ帳だけで作業を完結させたい方は、以下の手順を試してみてください。 メモ帳でテキストを検索する方法 メモ帳でテキストを検索するには、以下の手順に従います。 メモ帳を開き、検索対象のテキスト全体を貼り付ける。 上部のメニューバーから「編集」

  2. ChromeとFirefoxでページ内のテキストを検索・置換する方法

    ブラウザは、その名のとおりWebページを閲覧するためのツールであり、本来はテキストエディタではありません。そのため、「検索して置き換える(検索・置換)」のようなテキスト編集機能は、標準ではほとんど搭載されていません。しかし、ブログ記事を執筆しているとき、コメントを入力しているとき、メールを作成しているとき、あるいはフォーラムを管理しているときなど、同じ語句が何度も登場するため一括で置き換えたい場面があるかもしれません。そんなときに役立つのが「検索・置換」機能です。この記事では、Google ChromeとFirefoxに検索・置換機能を追加する方法を詳しく解説します。Google Chrome