0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

python 組み込みモジュール③ re

Posted at

モジュール概要

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']
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?