Pythonの構造的パターンマッチングとは
Pythonの構造的パターンマッチングは、Python 3.10で導入された新機能で、データの構造に基づいてマッチングを行うことができます。これは、特に複雑なデータ構造を扱う際に有用です。
構造的パターンマッチングは、match
文とcase
文を使用して実装されます。match
文は、マッチングを行いたい対象を指定し、case
文は、その対象が満たすべきパターンと、そのパターンがマッチした場合に実行するコードを指定します。
以下に、構造的パターンマッチングの基本的な使用例を示します:
match x:
case 0:
print("x is zero")
case 1:
print("x is one")
case _:
print("x is neither zero nor one")
このコードでは、x
の値が0、1、またはそれ以外の値である場合に、それぞれ異なるメッセージを出力します。case _:
は、どのパターンにもマッチしない場合のデフォルトの動作を指定します。
構造的パターンマッチングは、リストや辞書などの複雑なデータ構造に対しても使用することができます。これにより、Pythonのコードをより簡潔に、かつ可読性高く書くことが可能になります。
構造的パターンマッチングの基本的な使い方
Pythonの構造的パターンマッチングは、match
文とcase
文を使用して実装されます。以下にその基本的な使い方を示します。
match expression:
case pattern1:
# pattern1にマッチした場合の処理
case pattern2:
# pattern2にマッチした場合の処理
case _:
# どのパターンにもマッチしなかった場合の処理
ここで、expression
はマッチングを行いたい対象、pattern1
やpattern2
はその対象が満たすべきパターンを指定します。case _:
は、どのパターンにもマッチしない場合のデフォルトの動作を指定します。
例えば、以下のコードでは、整数の値に応じて異なるメッセージを出力します。
x = 5
match x:
case 0:
print("x is zero")
case 1:
print("x is one")
case _:
print("x is neither zero nor one")
このコードを実行すると、「x is neither zero nor one」と出力されます。
また、構造的パターンマッチングは、リストや辞書などの複雑なデータ構造に対しても使用することができます。以下にその例を示します。
data = {"name": "Alice", "age": 20}
match data:
case {"name": str(name), "age": int(age)}:
print(f"{name} is {age} years old")
case _:
print("Unknown data")
このコードでは、data
が指定したパターン(名前と年齢を持つ辞書)にマッチする場合に、その名前と年齢を出力します。パターンにマッチしない場合は、「Unknown data」と出力されます。
以上が、Pythonの構造的パターンマッチングの基本的な使い方です。この機能を活用することで、Pythonのコードをより簡潔に、かつ可読性高く書くことが可能になります。
構造的パターンマッチングの応用例
Pythonの構造的パターンマッチングは、複雑なデータ構造を扱う際に非常に有用です。以下に、その応用例を示します。
リストのパターンマッチング
リストの最初の要素と残りの要素を分けて処理することができます。
match lst:
case []:
print("The list is empty")
case [first, *rest]:
print(f"The first element is {first}, and the rest are {rest}")
このコードでは、lst
が空のリストである場合と、最低1つの要素を持つリストである場合を区別しています。
クラスのインスタンスのパターンマッチング
クラスのインスタンスに対してもパターンマッチングを行うことができます。以下にその例を示します。
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
match p:
case Point(x, y):
print(f"The point is at ({x}, {y})")
このコードでは、Point
クラスのインスタンスp
のx
とy
の値を取り出しています。
以上が、Pythonの構造的パターンマッチングの応用例です。この機能を活用することで、Pythonのコードをより簡潔に、かつ可読性高く書くことが可能になります。また、複雑なデータ構造を扱う際のコードの複雑さを大幅に軽減することができます。
Pythonのre.match関数とは
Pythonのre.match
関数は、正規表現モジュールre
の一部で、文字列の先頭が特定のパターンにマッチするかどうかをチェックするために使用されます。この関数は、マッチした結果をMatch
オブジェクトとして返します。マッチしなかった場合はNone
を返します。
以下にその基本的な使用方法を示します。
import re
pattern = r"\d+" # 数字にマッチするパターン
string = "123abc"
match = re.match(pattern, string)
if match:
print("Match found:", match.group())
else:
print("No match")
このコードでは、文字列"123abc"
の先頭が数字(\d+
)にマッチするかどうかをチェックしています。マッチした場合はその結果を出力します。
re.match
関数は、文字列の先頭からマッチングを開始するため、文字列の途中にマッチするパターンを見つけることはできません。文字列全体に対してパターンマッチングを行いたい場合は、re.search
関数を使用します。
以上が、Pythonのre.match
関数の基本的な説明です。この関数を活用することで、Pythonで正規表現を用いた文字列のパターンマッチングを行うことができます。
re.match関数の基本的な使い方
Pythonのre.match
関数は、文字列の先頭が特定の正規表現パターンにマッチするかどうかをチェックするために使用されます。以下にその基本的な使用方法を示します。
まず、re
モジュールをインポートします。
import re
次に、re.match
関数を使用して文字列が特定のパターンにマッチするかどうかをチェックします。re.match
関数は2つの引数を取ります:パターンとマッチングを行いたい文字列です。
pattern = r"\d+" # 数字にマッチするパターン
string = "123abc"
match = re.match(pattern, string)
このコードでは、文字列"123abc"
の先頭が1つ以上の数字(\d+
)にマッチするかどうかをチェックしています。
re.match
関数は、マッチした結果をMatch
オブジェクトとして返します。マッチしなかった場合はNone
を返します。したがって、以下のようにif
文を使用してマッチの結果をチェックすることができます。
if match:
print("Match found:", match.group())
else:
print("No match")
Match
オブジェクトのgroup
メソッドを使用すると、マッチした部分の文字列を取得することができます。
以上が、Pythonのre.match
関数の基本的な使い方です。この関数を活用することで、Pythonで正規表現を用いた文字列のパターンマッチングを行うことができます。
re.match関数の応用例
Pythonのre.match
関数は、文字列の先頭が特定の正規表現パターンにマッチするかどうかをチェックするために使用されます。以下に、その応用例を示します。
電話番号のパターンマッチング
以下のコードは、文字列が電話番号のパターン(例:123-456-7890)にマッチするかどうかをチェックします。
import re
pattern = r"\d{3}-\d{3}-\d{4}" # 電話番号のパターン
string = "123-456-7890"
match = re.match(pattern, string)
if match:
print("Match found:", match.group())
else:
print("No match")
このコードを実行すると、「Match found: 123-456-7890」と出力されます。
メールアドレスのパターンマッチング
以下のコードは、文字列がメールアドレスのパターンにマッチするかどうかをチェックします。
import re
pattern = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+" # メールアドレスのパターン
string = "[email protected]"
match = re.match(pattern, string)
if match:
print("Match found:", match.group())
else:
print("No match")
このコードを実行すると、「Match found: [email protected]」と出力されます。
以上が、Pythonのre.match
関数の応用例です。この関数を活用することで、Pythonで正規表現を用いた文字列のパターンマッチングを行うことができます。また、電話番号やメールアドレスなど、特定の形式を持つ文字列を検証する際にも有用です。