[Python] 正規表現で数字だけ判定・抽出する方法
Pythonで正規表現を使って数字だけを判定・抽出するには、re
モジュールを利用します。
数字だけを判定するには、re.fullmatch(r'\d+', text)
を使用し、text
が数字のみで構成されているかを確認します。
数字を抽出するには、re.findall(r'\d+', text)
を使い、text
内のすべての数字をリストとして取得します。
これにより、文字列から数字を効率的に処理できます。
正規表現の基本
正規表現は、文字列のパターンを指定して検索や置換を行うための強力なツールです。
Pythonでは、re
モジュールを使用して正規表現を扱うことができます。
正規表現を用いることで、特定の文字列パターンを簡単に見つけたり、抽出したりすることが可能です。
例えば、メールアドレスや電話番号のような特定の形式を持つデータを抽出する際に非常に便利です。
正規表現は、特定の文字や文字列の繰り返し、選択、グループ化などを表現するための特殊な記号や構文を使用します。
これにより、複雑な文字列操作を簡潔に記述することができます。
Pythonのre
モジュールを使うことで、正規表現を用いた文字列操作を効率的に行うことができます。
数字の判定と抽出
数字だけを判定する方法
Pythonで文字列が数字だけで構成されているかを判定するには、re.fullmatch
を使用します。
この関数は、文字列全体が指定した正規表現パターンに一致するかを確認します。
以下は、数字のみで構成されているかを判定するサンプルコードです。
import re
# 判定する文字列
text = "12345"
# 正規表現パターン
pattern = r"\d+"
# 数字だけかどうかを判定
if re.fullmatch(pattern, text):
print("この文字列は数字だけです。")
else:
print("この文字列には数字以外の文字が含まれています。")
この文字列は数字だけです。
このコードでは、\d+
という正規表現パターンを使用して、文字列全体が数字のみで構成されているかを判定しています。
数字を抽出する方法
文字列から数字を抽出するには、re.findall
を使用します。
この関数は、指定した正規表現パターンに一致するすべての部分文字列をリストとして返します。
以下は、文字列から数字を抽出するサンプルコードです。
import re
# 抽出する文字列
text = "abc123def456ghi789"
# 正規表現パターン
pattern = r"\d+"
# 数字を抽出
numbers = re.findall(pattern, text)
print("抽出された数字:", numbers)
抽出された数字: ['123', '456', '789']
このコードでは、文字列中のすべての数字の連続部分を抽出し、リストとして出力しています。
re.fullmatchとre.findallの違い
re.fullmatch
とre.findall
は、どちらも正規表現を用いて文字列を操作しますが、その用途と動作には違いがあります。
関数名 | 用途 | 動作 |
---|---|---|
re.fullmatch | 文字列全体がパターンに一致するかを判定する | 文字列全体が指定したパターンに一致する場合にマッチオブジェクトを返す |
re.findall | パターンに一致するすべての部分文字列を抽出する | 文字列中のすべての一致部分をリストとして返す |
re.fullmatch
は、文字列全体が特定のパターンに一致するかを確認するのに対し、re.findall
は、文字列中のすべての一致部分を抽出するために使用されます。
用途に応じて、適切な関数を選択することが重要です。
実践例
単一の数字列を判定する
単一の数字列が文字列全体を構成しているかを判定するには、re.fullmatch
を使用します。
以下のサンプルコードでは、文字列が数字のみで構成されているかを確認します。
import re
# 判定する文字列
text = "67890"
# 正規表現パターン
pattern = r"\d+"
# 数字列の判定
if re.fullmatch(pattern, text):
print("この文字列は単一の数字列です。")
else:
print("この文字列には数字以外の文字が含まれています。")
この文字列は単一の数字列です。
このコードは、文字列全体が数字のみで構成されているかを確認し、結果を出力します。
複数の数字列を抽出する
文字列から複数の数字列を抽出するには、re.findall
を使用します。
以下のサンプルコードでは、文字列中のすべての数字列を抽出します。
import re
# 抽出する文字列
text = "abc123def456ghi789"
# 正規表現パターン
pattern = r"\d+"
# 複数の数字列を抽出
numbers = re.findall(pattern, text)
print("抽出された数字列:", numbers)
抽出された数字列: ['123', '456', '789']
このコードは、文字列中のすべての数字列をリストとして抽出し、出力します。
テキストから電話番号を抽出する
特定のフォーマットに従った電話番号をテキストから抽出するには、正規表現を用います。
以下のサンプルコードでは、ハイフンで区切られた電話番号を抽出します。
import re
# 抽出する文字列
text = "連絡先は080-1234-5678または03-9876-5432です。"
# 正規表現パターン
pattern = r"\d{2,4}-\d{3,4}-\d{4}"
# 電話番号を抽出
phone_numbers = re.findall(pattern, text)
print("抽出された電話番号:", phone_numbers)
抽出された電話番号: ['080-1234-5678', '03-9876-5432']
このコードは、指定されたフォーマットの電話番号を文字列から抽出し、リストとして出力します。
正規表現パターンは、2~4桁の数字、ハイフン、3~4桁の数字、ハイフン、4桁の数字の順で構成されています。
応用例
数字と文字の混在する文字列から数字のみを抽出
文字列に数字と文字が混在している場合、数字のみを抽出するにはre.findall
を使用します。
以下のサンプルコードでは、文字列からすべての数字を抽出します。
import re
# 抽出する文字列
text = "商品コード: A123B456C789"
# 正規表現パターン
pattern = r"\d+"
# 数字のみを抽出
numbers = re.findall(pattern, text)
print("抽出された数字:", numbers)
抽出された数字: ['123', '456', '789']
このコードは、文字列中のすべての数字列を抽出し、リストとして出力します。
数字の範囲を指定して抽出する
特定の範囲内の数字を抽出するには、正規表現で条件を指定します。
以下のサンプルコードでは、1から100までの数字を抽出します。
import re
# 抽出する文字列
text = "数値: 5, 20, 150, 75, 200"
# 正規表現パターン
pattern = r"\b([1-9]|[1-9][0-9]|100)\b"
# 範囲内の数字を抽出
numbers_in_range = re.findall(pattern, text)
print("範囲内の数字:", numbers_in_range)
範囲内の数字: ['5', '20', '75']
このコードは、1から100までの数字を抽出し、リストとして出力します。
\b
は単語境界を示し、範囲を指定することで特定の数字のみを抽出します。
数字のフォーマットを変換する
数字のフォーマットを変換するには、re.sub
を使用して置換を行います。
以下のサンプルコードでは、カンマ区切りの数字をドット区切りに変換します。
import re
# 変換する文字列
text = "価格: 1,234,567円"
# 正規表現パターン
pattern = r","
# フォーマットを変換
formatted_text = re.sub(pattern, ".", text)
print("変換後の文字列:", formatted_text)
変換後の文字列: 価格: 1.234.567円
このコードは、カンマをドットに置換し、数字のフォーマットを変換します。
re.sub
を使用することで、指定したパターンを新しい文字列に置換できます。
まとめ
この記事では、Pythonの正規表現を用いて数字を判定・抽出する方法について詳しく解説しました。
正規表現の基本から始まり、具体的な実践例や応用例を通じて、さまざまなシナリオでの活用方法を紹介しました。
これを機に、日常のプログラミングにおいて正規表現を活用し、より効率的な文字列操作を試してみてはいかがでしょうか。