reモジュール
Pythonの組み込みライブラリであるre
ライブラリは、正規表現をサポートするモジュールです。正規表現は、検索パターンを定義する文字のシーケンスのことで、regexまたはregexpとも呼ばれます。re
モジュールを使用すると、文字列内のパターンを検索して、一致、置換、分割などのさまざまな操作を実行できます。
re
モジュールには、正規表現を扱うためのさまざまな関数やメソッドが提供されており、compile()
、search()
、match()
、fullmatch()
、findall()
、finditer()
、sub()
、split()
、escape()
、group()
、groups()
などが含まれます。これらのメソッドを使用すると、正規表現をコンパイルしたり、パターンを検索したり、サブストリングを置換したり、文字列を分割したりなど、文字列と正規表現を操作できます。
re
モジュールを使用すると、ログファイルの解析、ユーザー入力の検証など、複雑なテキスト処理タスクを実行できます。正規表現は学習が難しく、効果的に使用することが難しい場合がありますが、テキストデータを扱うための強力なツールです。
以下は、文字列内のパターンを検索するためにre
モジュールを使用する例です。
import re
text = "The quick brown fox jumps over the lazy dog"
pattern = r"fox"
result = re.search(pattern, text)
if result:
print("Match found:", result.group())
else:
print("No match found.")
この例では、re
モジュールをインポートして、text
という文字列変数を定義します。また、単語「fox」に一致する正規表現パターンを定義します。その後、re.search()
メソッドを使用して、text
変数内でパターンを検索します。一致が見つかった場合、group()
メソッドを使用して一致した部分文字列を表示します。一致が見つからなかった場合は、一致が見つからなかったことを示すメッセージを表示します。
メソッド
Pythonのre
モジュールには、正規表現を扱うためのいくつかのメソッドが用意されています。この記事では、それらのメソッドについて説明し、それぞれの使用例と出力を紹介します。
re.compile()
re.compile()
メソッドは、正規表現パターンを正規表現オブジェクトにコンパイルし、パターンマッチングに使用するためのものです。以下は例です。
import re
pattern = re.compile(r'\d+')
result = pattern.findall('There are 123 apples and 456 oranges')
print(result)
['123', '456']
この例では、re.compile()
を使って正規表現パターン\d+を正規表現オブジェクトにコンパイルしました。そして、このオブジェクトのfindall()
メソッドを使用して、与えられた文字列中の1つ以上の数字の全ての出現を検索しました。
re.search()
re.search()
メソッドは、文字列内の正規表現パターンの最初の出現を検索します。以下は例です。
import re
result = re.search(r'\d+', 'There are 123 apples and 456 oranges')
print(result.group())
123
この例では、与えられた文字列内で1つ以上の数字の最初の出現を検索するために、re.search()
を使用しています。そして、結果のマッチオブジェクトのgroup()
メソッドを使用して、マッチした文字列を取得しています。
re.match()
re.match()
メソッドは、re.search()
と似ていますが、文字列の先頭でしか検索しません。以下は例です。
import re
result = re.match(r'\d+', '123 apples and 456 oranges')
print(result.group())
123
この例では、与えられた文字列の先頭で1つ以上の数字の最初の出現を検索するために、re.match()
を使用しています。
re.fullmatch()
re.fullmatch()
メソッドは、re.match()
と似ていますが、先頭だけでなく文字列全体にマッチします。以下は例です。
import re
result = re.fullmatch(r'\d+', '123')
print(result.group())
123
この例では、re.fullmatch()
を使用して、文字列全体が正規表現パターン\d+
にマッチするようにしています。
re.findall()
re.findall()
メソッドは、文字列内の正規表現パターンに一致する全ての重複しない部分文字列のリストを返します。以下に例を示します。
import re
result = re.findall(r'\d+', 'There are 123 apples and 456 oranges')
print(result)
['123', '456']
この例では、re.findall()
を使用して、与えられた文字列内の1つ以上の数字の全ての出現箇所を検索しています。
re.finditer()
re.finditer()
メソッドは、文字列内の正規表現パターンに一致する全ての重複しない部分文字列のマッチオブジェクトを生成するイテレータを返します。以下に例を示します。
import re
for match in re.finditer(r'\d+', 'There are 123 apples and 456 oranges'):
print(match.group())
123
456
この例では、re.finditer()
を使用して、与えられた文字列内の1つ以上の数字の全ての出現箇所を検索しています。その後、結果のイテレータをループ処理し、一致した文字列を出力しています。
re.sub()
re.sub()
メソッドは、文字列内のパターンを置換文字列で置き換えます。re.sub()
の構文は次のようになります。
re.sub(pattern, repl, string, count=0, flags=0)
pattern
: 検索する正規表現パターンrepl
: 置換する文字列string
: 検索する文字列count
(オプション): 置換する最大数(デフォルトは0で、全ての出現箇所を置換します)flags
(オプション): 正規表現フラグ
以下に、文字列内の全ての "world" の出現箇所を "python" で置き換える例を示します。
import re
string = "hello world, welcome to the world of python"
new_string = re.sub("world", "python", string)
print(new_string)
hello python, welcome to the python of python
re.split()
re.split()
メソッドは、正規表現パターンを区切り文字列として使用して、文字列をサブストリングのリストに分割するために使用されます。re.split()
の構文は次のとおりです。
re.split(pattern, string, maxsplit=0, flags=0)
pattern
: 区切り文字列として使用する正規表現パターンstring
: 分割する文字列maxsplit
(オプション): 実行する最大分割数(デフォルトは0で、全ての出現を分割します)flags
(オプション): 正規表現フラグ
以下は、1つ以上のスペースにマッチする正規表現パターンを使用して、文字列を分割する例です。
import re
string = "hello world of python"
new_list = re.split("\s+", string)
print(new_list)
['hello', 'world', 'of', 'python']
re.escape()
re.escape()
メソッドは、文字列内の特殊文字をエスケープして、正規表現パターン内のリテラル文字として使用できるようにするために使用されます。 re.escape()
の構文は次のとおりです。
re.escape(string)
string
: エスケープする文字列
以下は、文字列内の特殊文字をエスケープするためにre.escape()
を使用する例です。
import re
string = "hello (world)"
escaped_string = re.escape(string)
print(escaped_string)
hello\ \(world\)
re.group()
re.group()
メソッドは、正規表現パターン内の特定のグループに一致する部分文字列を取得するために使用されます。re.group()
の構文は次のとおりです。
re.group([group1, ...])
group1
,group2
, ... (optional): the group numbers to retrieve
以下は、re.group()
を使用して特定のグループに一致する部分文字列を取得する例です。
import re
string = "hello world"
pattern = r"(\w+)\s(\w+)"
match = re.search(pattern, string)
print(match.group(1))
hello
re.groups()
re.groups()
メソッドは、正規表現パターン内のキャプチャされたグループ全てを含むタプルを返します。グループは、パターン内でかっこで定義されます。グループが一致しない場合は、空のタプルが返されます。
以下は例です。
import re
pattern = r'(\d{3})-(\d{2})-(\d{4})'
string = 'My SSN is 123-45-6789.'
match = re.search(pattern, string)
if match:
groups = match.groups()
print(groups)
('123', '45', '6789')
この例では、xxx-xx-xxxx形式の社会保障番号 (SSN) にマッチする正規表現パターンを定義します。re.search()
メソッドを使用して、このパターンを指定された文字列内で検索します。一致が見つかった場合、結果のマッチオブジェクトに対してgroups()
メソッドを呼び出して、パターンでキャプチャされた全てのグループを抽出します。得られたタプルには、SSNを構成する三つの数字グループが含まれています。
参考