Python re.fullmatch() メソッド
re.fullmatch()は Pythonreモジュール内で文字列全体の完全一致を行う関数です。
とre.match()異なり、re.fullmatch()文字列全体が正規表現に完全に一致することを要求し、先頭からの一致だけではありません。
単語の意味: full match完全一致という意味です。
基本構文とパラメータ
re.fullmatch()これはモジュールレベルの関数であり、reモジュールから直接呼び出されます。
構文形式
re.fullmatch(pattern, string, flags=0)
パラメータの説明
- pattern:
- 型:文字列 (str)
- 説明:一致させる対象の正規表現パターン。
- string:
- 型:文字列 (str)
- 説明:一致判定の対象となる文字列。
- flags:
- 型:整数 (int、オプション)
- 説明:正規表現フラグ。
関数の説明
- 戻り値: 文字列全体が一致した場合は、
matchオブジェクトを返し、そうでない場合はNone。 - 特徴: 文字列が先頭から末尾まで完全に一致することを要求し、余分な文字は許容されません。
例
一連の例を通してre.fullmatch()の使い方をマスターしましょう。
例1:基本的な使い方 - 完全一致
例
import re
# 文字列全体を完全に一致させる
text = "hello"
result = re.fullmatch(r'hello', text)
if result:
print("完全一致成功:", result.group())
# 文字列全体を完全に一致させる
text = "hello"
result = re.fullmatch(r'hello', text)
if result:
print("完全一致成功:", result.group())
実行結果の予想:
完整匹配成功: hello
コードの解説:
re.fullmatch()文字列 "hello" がパターン "hello" に完全一致することを要求します。- 一致に成功し、match オブジェクトを返します。
例2:完全一致が失敗する場合
文字列に余分な文字が含まれている場合、一致は失敗します。
例
import re
text = "hello world"
# "hello" に完全一致させてみる
result = re.fullmatch(r'hello', text)
if result:
print("一致成功:", result.group())
else:
print("一致失敗:文字列は 'hello' と完全には等しくありません")
text = "hello world"
# "hello" に完全一致させてみる
result = re.fullmatch(r'hello', text)
if result:
print("一致成功:", result.group())
else:
print("一致失敗:文字列は 'hello' と完全には等しくありません")
実行結果の予想:
匹配失败: 字符串不是完全等于 'hello'
コードの解説:
- 文字列 "hello world" には余分な文字が含まれるため、"hello" に完全一致できません。
- この場合、
fullmatch返します。None。
例3:正規表現パターンの使用
fullmatch完全な正規表現構文をサポートします。
例
import re
# 数字に完全一致させる
text = "12345"
result = re.fullmatch(r'\d+', text)
if result:
print("数字の一致:", result.group())
# アルファベットに完全一致させる
text2 = "abc"
result2 = re.fullmatch(r'[a-z]+', text2)
if result2:
print("アルファベットの一致:", result2.group())
# 数字に完全一致させる
text = "12345"
result = re.fullmatch(r'\d+', text)
if result:
print("数字の一致:", result.group())
# アルファベットに完全一致させる
text2 = "abc"
result2 = re.fullmatch(r'[a-z]+', text2)
if result2:
print("アルファベットの一致:", result2.group())
実行結果の予想:
数字匹配: 12345 字母匹配: abc
例4:固定フォーマットの検証
fullmatch入力が特定の形式に適合するかどうかを検証するためによく使用されます。
例
import re
# 携帯電話番号の形式を検証する
phone = "138-1234-5678"
result = re.fullmatch(r'\d{3}-\d{4}-\d{4}', phone)
if result:
print(f"携帯電話番号 {phone} の形式は正しい")
else:
print(f"携帯電話番号 {phone} の形式は正しくない")
# メールアドレスの形式を検証する
email = "[email protected]"
result2 = re.fullmatch(r'\w+@\w+\.\w+', email)
if result2:
print(f"メールアドレス {email} の形式は正しい")
else:
print(f"メールアドレス {email} の形式は正しくない")
# 携帯電話番号の形式を検証する
phone = "138-1234-5678"
result = re.fullmatch(r'\d{3}-\d{4}-\d{4}', phone)
if result:
print(f"携帯電話番号 {phone} の形式は正しい")
else:
print(f"携帯電話番号 {phone} の形式は正しくない")
# メールアドレスの形式を検証する
email = "[email protected]"
result2 = re.fullmatch(r'\w+@\w+\.\w+', email)
if result2:
print(f"メールアドレス {email} の形式は正しい")
else:
print(f"メールアドレス {email} の形式は正しくない")
実行結果の予想:
手机号 138-1234-5678 格式正确 邮箱 [email protected] 格式正确
コードの解説:
fullmatchデータ検証の場面に非常に適しています。- 文字列が形式に完全に適合する場合のみ、一致が成功します。
例5:match と fullmatch の比較
例
import re
text = "hello world"
# match は先頭からのみ一致させる
match_result = re.match(r'hello', text)
# fullmatch は完全一致を要求する
fullmatch_result = re.fullmatch(r'hello', text)
print("match の結果:", match_result.group() if match_result else None)
print("fullmatch の結果:", fullmatch_result.group() if fullmatch_result else None)
print("-" * 20)
# 文字列全体に完全一致させてみる
text2 = "hello"
match_result2 = re.match(r'hello', text2)
fullmatch_result2 = re.fullmatch(r'hello', text2)
print("match の結果:", match_result2.group() if match_result2 else None)
print("fullmatch の結果:", fullmatch_result2.group() if fullmatch_result2 else None)
text = "hello world"
# match は先頭からのみ一致させる
match_result = re.match(r'hello', text)
# fullmatch は完全一致を要求する
fullmatch_result = re.fullmatch(r'hello', text)
print("match の結果:", match_result.group() if match_result else None)
print("fullmatch の結果:", fullmatch_result.group() if fullmatch_result else None)
print("-" * 20)
# 文字列全体に完全一致させてみる
text2 = "hello"
match_result2 = re.match(r'hello', text2)
fullmatch_result2 = re.fullmatch(r'hello', text2)
print("match の結果:", match_result2.group() if match_result2 else None)
print("fullmatch の結果:", fullmatch_result2.group() if fullmatch_result2 else None)
実行結果の予想:
match 结果: hello fullmatch 结果: None -------------------- match 结果: hello fullmatch 结果: hello
コードの解説:
re.match()文字列の先頭から一致すればよく、完全一致は要求されません。re.fullmatch()文字列全体の先頭から末尾までの完全一致を要求します。
例6:グループの使用
例
import re
text = "2024-04-02"
# グループを使用して日付に完全一致させる
result = re.fullmatch(r'(\d{4})-(\d{2})-(\d{2})', text)
if result:
print("完全一致:", result.group())
print("年:", result.group(1))
print("月:", result.group(2))
print("日:", result.group(3))
text = "2024-04-02"
# グループを使用して日付に完全一致させる
result = re.fullmatch(r'(\d{4})-(\d{2})-(\d{2})', text)
if result:
print("完全一致:", result.group())
print("年:", result.group(1))
print("月:", result.group(2))
print("日:", result.group(3))
実行結果の予想:
完整匹配: 2024-04-02 年: 2024 月: 04 日: 02
その他の拡張