[Python] 正規表現で数字だけ判定・抽出する方法

Pythonで正規表現を使って数字だけを判定・抽出するには、reモジュールを利用します。

数字だけを判定するには、re.fullmatch(r'\d+', text)を使用し、textが数字のみで構成されているかを確認します。

数字を抽出するには、re.findall(r'\d+', text)を使い、text内のすべての数字をリストとして取得します。

これにより、文字列から数字を効率的に処理できます。

この記事でわかること
  • 正規表現を用いた数字の判定と抽出の基本的な方法
  • re.fullmatchとre.findallの違いとそれぞれの用途
  • 文字列から特定のフォーマットの数字を抽出する実践的な方法
  • 数字と文字が混在する文字列から数字のみを抽出するテクニック
  • 正規表現を用いた数字のフォーマット変換の方法

目次から探す

正規表現の基本

正規表現は、文字列のパターンを指定して検索や置換を行うための強力なツールです。

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.fullmatchre.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を使用することで、指定したパターンを新しい文字列に置換できます。

よくある質問

reモジュール以外で数字を判定・抽出する方法はある?

はい、reモジュールを使用せずに数字を判定・抽出する方法もあります。

例えば、文字列が数字のみで構成されているかを判定するには、str.isdigit()メソッドを使用できます。

例:text.isdigit()

また、数字を抽出するには、リスト内包表記とstr.isdigit()を組み合わせて、文字列中の数字をリストとして抽出することも可能です。

例:[char for char in text if char.isdigit()]

正規表現で数字以外の文字を除去するには?

正規表現を使用して数字以外の文字を除去するには、re.subを用いて置換を行います。

具体的には、数字以外の文字を空文字に置換することで実現できます。

例:re.sub(r'\D', '', text)

ここで、\Dは数字以外の文字を表します。

この方法を使うと、文字列から数字以外のすべての文字を除去することができます。

正規表現のパフォーマンスを向上させる方法は?

正規表現のパフォーマンスを向上させるためには、以下の点に注意することが重要です。

  • シンプルなパターンを使用する: 複雑なパターンは処理に時間がかかるため、可能な限りシンプルなパターンを使用します。
  • コンパイル済みパターンを再利用する: re.compile()を使用して正規表現パターンをコンパイルし、再利用することでパフォーマンスを向上させることができます。
  • 必要な部分だけをマッチさせる: 文字列全体を対象にするのではなく、必要な部分だけをマッチさせるようにパターンを設計します。

これらの方法を組み合わせることで、正規表現の処理を効率化し、パフォーマンスを向上させることができます。

まとめ

この記事では、Pythonの正規表現を用いて数字を判定・抽出する方法について詳しく解説しました。

正規表現の基本から始まり、具体的な実践例や応用例を通じて、さまざまなシナリオでの活用方法を紹介しました。

これを機に、日常のプログラミングにおいて正規表現を活用し、より効率的な文字列操作を試してみてはいかがでしょうか。

  • URLをコピーしました!
目次から探す