モジュール概要
N/A
reモジュールでよく使われるメソッド
match() と fullmatch()
Python の正規表現モジュール re では、match と fullmatch はどちらも正規表現パターンと文字列の一致を確認するために使用されますが、それぞれの動作には明確な違いがあります。
① match()
- 機能:match メソッドは、文字列の先頭から正規表現パターンが一致するかどうかを確認します。
- 一致ルール:部分一致でOKです。文字列全体を一致させる必要はありません。
- 使用方法:re.match(pattern, string, flags=0)
import re
# 成功: "123" は文字列の先頭に一致
result = re.match(r'\d+', '123abc')
print(result.group()) # 出力:123
# 失敗: "abc" が先頭にあるため一致しない
result = re.match(r'\d+', 'abc123')
print(result) # 出力:None
② fullmatch()
- 機能:fullmatch メソッドは、正規表現パターンが文字列全体と一致するかどうかを確認します。
- 一致ルール:文字列全体が一致する必要があり、一部のみ一致する場合は失敗します。
- 使用方法:re.fullmatch(pattern, string, flags=0)
import re
# 成功: "123" は文字列全体に完全一致
result = re.fullmatch(r'\d+', '123')
print(result.group()) # 出力:123
# 失敗: "123abc" には余分な "abc" があるため一致しない
result = re.fullmatch(r'\d+', '123abc')
print(result) # 出力:None
違いのまとめ
特徴 | re.match | re.fullmatch |
---|---|---|
一致範囲 | 文字列の先頭から一致 | 文字列全体が一致 |
部分一致 | 可能 | 不可能 |
使用シーン | 文字列が特定のパターンで始まるか確認 | 文字列全体がパターンに一致するか確認 |
選択のポイント
- 文字列全体が完全一致するかどうかを確認したい場合は、fullmatch を使用します。
- 文字列の先頭部分がパターンに一致するかどうかを確認したい場合は、match を使用します。
flagsについて
Pythonの正規表現モジュールreにおいて、flagsは正規表現の動作を変更するためのオプションを指定する引数です。正規表現の処理に対して特定の条件や設定を付加する際に使用されます。
- re.IGNORECASE(re.I)
大文字・小文字を区別せずに一致させます。
import re
result = re.match(r'abc', 'ABC', flags=re.IGNORECASE)
print(result.group()) # 出力:ABC
- re.MULTILINE(re.M)
^や$を、文字列全体ではなく各行の開始や終了に対応させます。
text = "first line\nsecond line"
result = re.findall(r'^.+', text, flags=re.MULTILINE)
print(result) # 出力:['first line', 'second line']
- re.DOTALL(またはre.S)
.(ドット)が改行文字(\n)を含むすべての文字と一致するようにします。
text = "first line\nsecond line"
result = re.match(r'.+', text, flags=re.DOTALL)
print(result.group()) # 出力:first line\nsecond line
- re.VERBOSE(またはre.X)
正規表現を見やすく記述するために、空白やコメントを許可します。
pattern = r'''
\d+ # 数字
\s+ # 空白
\w+ # 単語
'''
result = re.match(pattern, '123 abc', flags=re.VERBOSE)
print(result.group()) # 出力:123 abc
- re.ASCII(またはre.A)
パターン内の\wや\dなどのメタ文字をASCII文字に限定します。
result = re.match(r'\w+', 'こんにちは', flags=re.ASCII)
print(result) # 出力:None(ASCII外の文字は一致しない)
-
re.LOCALE(またはre.L)
ロケール(地域設定)に基づいて\wや\dなどの動作を変更します。(あまり使われません) -
re.UNICODE(またはre.U)
Unicodeに基づいて\wや\dなどの動作を適用します。(デフォルトで有効)
flagsの複数指定
複数のflagsを同時に使用することができます。
|(ビット単位のOR演算子)を使って組み合わせます。
import re
pattern = r'abc'
text = "ABC\nabc"
result = re.findall(pattern, text, flags=re.IGNORECASE | re.MULTILINE)
print(result) # 出力:['ABC', 'abc']