Pythonで正規表現を扱う際に使える文法や書き方は多岐にわたります。正規表現を使うことで、文字列のパターンマッチングや検索、置換などができるようになります。本記事では、Pythonでの正規表現の書き方について詳しく解説します。
正規表現の基本的な文法
Pythonのreモジュールを使うことで正規表現を扱うことができます。以下に、正規表現で使われる基本的な文法を示します。
- 文字のマッチング:文字列と同じ文字でマッチングします。
- 例:
a
は文字列"a"
とマッチングします。
- 例:
- ドット(.):任意の一文字とマッチングします。
- 例:
a.
は"ab"
や"ac"
とマッチングしますが、"a"
や"ad"
とはマッチングしません。
- 例:
- 文字クラス():内のいずれかの文字とマッチングします。
- 例:
[abc]
は"a"
や"b"
や"c"
とマッチングしますが、"d"
や"ab"
とはマッチングしません。
- 例:
- ワイルドカード(\w):アルファベット、数字、アンダースコア(_)のいずれかとマッチングします。
- 例:
\w
は"a"
や"1"
や"_"
とマッチングしますが、"あ"
や"%"
とはマッチングしません。
- 例:
- パターンの繰り返し:
*
:0回以上の繰り返しにマッチングします。- 例:
a*
は""
や"a"
や"aaaa"
とマッチングします。
- 例:
+
:1回以上の繰り返しにマッチングします。- 例:
a+
は"a"
や"aaaa"
とマッチングしますが、""
とはマッチングしません。
- 例:
?
:0回または1回の繰り返しにマッチングします。- 例:
a?
は""
や"a"
とマッチングしますが、"aa"
とはマッチングしません。
- 例:
{m}
:m回の繰り返しにマッチングします。- 例:
a{3}
は"aaa"
とマッチングしますが、"aa"
や"aaaa"
とはマッチングしません。
- 例:
{m,n}
:m回以上n回以下の繰り返しにマッチングします。- 例:
a{2,4}
は"aa"
や"aaa"
や"aaaa"
とマッチングしますが、"a"
や"aaaaa"
とはマッチングしません。
- 例:
- アンカー:
^
:文字列の先頭にマッチングします。- 例:
^a
は"abc"
とマッチングしますが、"bac"
とはマッチングしません。
- 例:
$
:文字列の末尾にマッチングします。- 例:
a$
は"cba"
とマッチングしますが、"abc"
とはマッチングしません。
- 例:
正規表現を使ったプログラムの書き方
Pythonのreモジュールを使って、正規表現を使ったプログラムを書くことができます。以下に、正規表現を使ったプログラムの例を示します。
import re # 文字列のパターンマッチング pattern = r"cat" text = "The cat is sleeping." match = re.search(pattern, text) if match: print("Match found!") else: print("Match not found.") # 文字列の置換 pattern = r"cat" text = "The cat is sleeping." replacement = "dog" new_text = re.sub(pattern, replacement, text) print(new_text) # マッチした文字列の取得 pattern = r"(\d{3})-(\d{4})-(\d{4})" text = "My phone number is 123-4567-8901." match = re.search(pattern, text) if match: print("Match found!") area_code, exchange_number, subscriber_number = match.groups() print(area_code, exchange_number, subscriber_number) else: print("Match not found.")
上記のプログラムでは、正規表現を使って文字列のパターンマッチング、文字列の置換、マッチした文字列の取得を行っています。reモジュールのsearch関数を使って、正規表現にマッチする部分文字列を検索しています。また、sub関数を使って、正規表現にマッチする部分文字列を置換しています。さらに、groupsメソッドを使って、マッチした文字列のグループを取得しています。
正規表現を使ったプログラムを書く際には、正規表現の文法を理解し、reモジュールの関数を適切に使うことが大切です。また、正規表現のパターンを正確に書くことで、効率的な文字列処理を実現することができます。