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

【Python】正規表現(Regex)で文字列内の「1(0+)1」パターンをすべて検索する方法

このチュートリアルでは、Pythonの正規表現(regex)を使って、文字列内に含まれる「1(0+)1」というパターンをすべて検出するプログラムを作成します。Pythonには正規表現を扱うためのreモジュールが標準で用意されており、これを活用することでパターンマッチングを簡単に実装できます。

サンプルケース

まず、どのような動作になるのかサンプルを見てみましょう。

入力:
string = "Sample 1(0+)1 string with 1(0+)1 unnecessary patterns 1(0+)1"

出力:
パターンの一致数:3件
['1(0+)1', '1(0+)1', '1(0+)1']

それでは、以下の手順に従ってプログラムを作成していきましょう。

アルゴリズム

1. reモジュールをインポートする。
2. 検索対象となる文字列を初期化する。
3. re.compile() を使って、目的のパターンに一致する正規表現オブジェクトを作成する。※通常の文字列ではなく raw文字列(r"")を渡す点に注意。
4. 正規表現オブジェクトの findall() メソッドを使い、パターンに一致するすべての箇所を抽出する。
5. 一致したパターンの件数と内容を出力する。

使用する正規表現パターンの解説

今回使用するパターン r"\d\(\d\+\)\d" の各要素は以下の意味を持ちます。

  • \d … 任意の1桁の数字に一致(ここでは「1」や「0」など)
  • \( / \) … リテラルの括弧「(」「)」に一致(正規表現では特殊文字のためエスケープが必要)
  • \+ … リテラルの「+」に一致(こちらもエスケープが必要)

つまり、このパターンは「数字(数字+)数字」という形式、たとえば 1(0+)1 のような文字列に一致します。

コード例

# reモジュールをインポート
import re

# 検索対象の文字列を初期化
string = "Sample 1(0+)1 string with 1(0+)1 unnecessary patterns 1(0+)1"

# パターンに対応する正規表現オブジェクトを作成
# 「数字(数字+)数字」の形式に一致するパターン
regex = re.compile(r"\d\(\d\+\)\d")

# findall()で一致したすべてのパターンをリストとして取得
result = regex.findall(string)

# 一致したパターンの件数を出力
print(f"パターンの一致数は {len(result)} 件です")
print()

# 一致したパターンの一覧を出力
print(result)

実行結果

上記のコードを実行すると、次のような出力が得られます。

パターンの一致数は 3 件です

['1(0+)1', '1(0+)1', '1(0+)1']

ポイントのまとめ

  • findall() メソッドは、一致したすべての文字列をリスト形式で返します。最初の一致だけを取得したい場合は search() を使います。
  • 正規表現を記述する際は raw文字列(r"") を使うことで、バックスラッシュの二重エスケープを避け、可読性の高いコードになります。
  • ()+ は正規表現において特別な意味を持つため、リテラルとして扱う場合は \ でエスケープする必要があります。

おわりに

今回は、Pythonの re モジュールと正規表現を使って、文字列内の特定パターン「1(0+)1」をすべて検出する方法を解説しました。re.compile() でパターンを事前にコンパイルしておくと、同じパターンを繰り返し使う場合に処理効率も向上します。この手法は、ログ解析やデータクレンジングなど、さまざまなテキスト処理の場面で応用できますので、ぜひ活用してみてください。

本チュートリアルについてご不明な点がありましたら、コメント欄にてお気軽にお尋ねください。

  1. セットを使って文字列内の母音の数をカウントするPythonプログラム

    本記事では、Pythonを使って文字列内に含まれる母音の数をカウントする方法について解説します。セット(set)を活用した効率的な実装を中心に、初心者の方にもわかりやすく説明していきます。 問題の概要 問題文:任意の文字列が与えられたとき、その文字列に含まれる母音の数をセットを使って数えます。 基本的なアプローチとしては、文字列全体を先頭から順に走査し、各文字が母音であるかどうかを判定します。母音であればカウントを1ずつ増やしていき、最終的な合計を出力します。 実装例 def vowel_count(str_): count = 0 # 母音をセットとして定義 vowe

  2. Pythonで文字列のすべての順列を取得する方法【itertoolsと再帰で解説】

    itertools.permutationsを使った方法 Pythonで文字列のすべての順列(並べ替え)を求める最も簡単な方法は、標準ライブラリのitertoolsモジュールにあるpermutations()関数を使用することです。この関数は、イテラブルなオブジェクトから要素を取り出し、指定した長さrの順列をタプルとして順番に返します。 結果を文字列として取得するには、関数の戻り値をループで処理し、各タプルの要素をjoin()で連結します。以下に具体例を示します。 from itertools import permutations result = [.join(p) for p in p