Pythonでの正規表現の基本
Pythonでは、re
モジュールを使用して正規表現を扱います。このモジュールはPythonの標準ライブラリに含まれているため、追加のインストールは必要ありません。
正規表現のコンパイル
まず、正規表現をコンパイルする必要があります。これは、re.compile()
関数を使用して行います。
import re
pattern = re.compile(r'\d+')
上記のコードでは、\d+
という正規表現をコンパイルしています。この正規表現は1つ以上の数字にマッチします。
文字列の検索
次に、re.search()
関数を使用して文字列を検索します。この関数は、正規表現がマッチする最初の位置を返します。
match = pattern.search('hello 123 world')
print(match) # <re.Match object; span=(6, 9), match='123'>
マッチオブジェクト
re.search()
関数は、マッチオブジェクトを返します。このオブジェクトから、マッチした文字列やその位置を取得することができます。
print(match.group()) # '123'
print(match.start()) # 6
print(match.end()) # 9
以上がPythonでの正規表現の基本的な使い方です。次のセクションでは、アルファベットのマッチングについて詳しく説明します。
アルファベットのマッチング
Pythonの正規表現では、アルファベットのマッチングも可能です。具体的には、[a-z]
や[A-Z]
といったパターンを使用します。
小文字のアルファベット
小文字のアルファベットにマッチさせるには、[a-z]
というパターンを使用します。
pattern = re.compile(r'[a-z]+')
match = pattern.search('Hello World')
print(match.group()) # 'ello'
このコードでは、最初にマッチした小文字のアルファベットの連続した部分を取得しています。
大文字のアルファベット
同様に、大文字のアルファベットにマッチさせるには、[A-Z]
というパターンを使用します。
pattern = re.compile(r'[A-Z]+')
match = pattern.search('Hello World')
print(match.group()) # 'H'
このコードでは、最初にマッチした大文字のアルファベットの連続した部分を取得しています。
大文字・小文字を問わないマッチング
大文字・小文字を問わないマッチングを行うには、re.IGNORECASE
またはre.I
フラグを使用します。
pattern = re.compile(r'[a-z]+', re.I)
match = pattern.search('Hello World')
print(match.group()) # 'Hello'
このコードでは、最初にマッチしたアルファベットの連続した部分を取得しています。大文字・小文字は区別されません。
以上がPythonでのアルファベットのマッチングについての基本的な説明です。次のセクションでは、特殊文字とエスケープシーケンスについて詳しく説明します。
特殊文字とエスケープシーケンス
正規表現では、特定の文字列を表すために特殊文字とエスケープシーケンスが使用されます。
特殊文字
以下は、正規表現でよく使用される特殊文字の一部です:
.
:任意の文字(改行文字を除く)にマッチします。*
:直前の文字が0回以上繰り返す場合にマッチします。+
:直前の文字が1回以上繰り返す場合にマッチします。?
:直前の文字が0回または1回出現する場合にマッチします。{n}
:直前の文字がn回繰り返す場合にマッチします。{n,}
:直前の文字がn回以上繰り返す場合にマッチします。{,m}
:直前の文字がm回以下繰り返す場合にマッチします。{n,m}
:直前の文字がn回以上、m回以下繰り返す場合にマッチします。
エスケープシーケンス
特殊文字自体を検索する場合や、特定のパターンを表すためにエスケープシーケンスが使用されます。エスケープシーケンスはバックスラッシュ\
で始まります。
以下は、正規表現でよく使用されるエスケープシーケンスの一部です:
\d
:任意の数字にマッチします。\D
:数字以外の任意の文字にマッチします。\s
:任意の空白文字にマッチします。\S
:空白文字以外の任意の文字にマッチします。\w
:任意の英数字またはアンダースコアにマッチします。\W
:英数字またはアンダースコア以外の任意の文字にマッチします。\\
:バックスラッシュ自体にマッチします。
以上がPythonでの特殊文字とエスケープシーケンスの基本的な説明です。次のセクションでは、正規表現の応用例について詳しく説明します。
正規表現の応用例
正規表現は、様々なテキスト処理タスクに応用することができます。以下に、その一部を示します。
電話番号の抽出
以下のコードは、テキストから電話番号を抽出する例です。
text = 'お問い合わせは012-3456-7890までお願いします。'
pattern = re.compile(r'\d{2,4}-\d{2,4}-\d{4}')
match = pattern.search(text)
print(match.group()) # '012-3456-7890'
メールアドレスの検証
以下のコードは、メールアドレスが正しい形式になっているかを検証する例です。
email = '[email protected]'
pattern = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}')
match = pattern.fullmatch(email)
print(match is not None) # True
HTMLタグの削除
以下のコードは、HTMLタグを削除する例です。
html = '<h1>タイトル</h1><p>これはパラグラフです。</p>'
pattern = re.compile(r'<.*?>')
text = pattern.sub('', html)
print(text) # 'タイトルこれはパラグラフです。'
以上がPythonでの正規表現の応用例についての説明です。正規表現は非常に強力なツールであり、テキスト処理タスクを効率的に行うために広く使用されています。ただし、複雑なパターンを扱う場合は注意が必要です。正規表現が複雑になると、その理解やメンテナンスが難しくなることがあります。そのため、必要以上に複雑な正規表現を避け、可能な限りシンプルに保つことが推奨されます。