[Python] 正規表現で数字かどうか判定する方法

Pythonで正規表現を使用して数字かどうかを判定するには、reモジュールを使います。

re.match()re.fullmatch()を利用して、数字にマッチする正規表現パターンを指定します。

例えば、整数を判定する場合はパターンr'\d+'を使います。

浮動小数点数を含む場合は、r'\d+(\.\d+)?'のように小数点を考慮したパターンを使用します。

re.fullmatch()を使うと、文字列全体が数字かどうかを確認できます。

この記事でわかること
  • 正規表現を使った数値判定方法
  • 整数や小数の判定コード例
  • ユーザー入力のバリデーション手法
  • 文字列から数字を抽出する方法
  • 科学技術表記の数値の扱い方

目次から探す

数字を判定するための正規表現パターン

Pythonでは、正規表現を使用して文字列が特定のパターンに一致するかどうかを判定できます。

ここでは、数字を判定するための正規表現パターンをいくつか紹介します。

整数を判定する正規表現

整数を判定するための正規表現は、次のようになります。

import re
# 整数を判定する正規表現
pattern = r'^[+-]?\d+$'
test_string = "12345"
if re.match(pattern, test_string):
    print("整数です。")
else:
    print("整数ではありません。")
整数です。

この正規表現は、オプションで符号(+または-)を持つ整数を判定します。

^は文字列の先頭、$は文字列の末尾を示します。

小数を判定する正規表現

小数を判定するための正規表現は、次のようになります。

import re
# 小数を判定する正規表現
pattern = r'^[+-]?(\d+(\.\d*)?|\.\d+)$'
test_string = "123.45"
if re.match(pattern, test_string):
    print("小数です。")
else:
    print("小数ではありません。")
小数です。

この正規表現は、整数部と小数部の両方を考慮し、オプションで符号を持つ小数を判定します。

正負の数を判定する正規表現

正負の数を判定するための正規表現は、次のようになります。

import re
# 正負の数を判定する正規表現
pattern = r'^[+-]?\d+(\.\d+)?$'
test_string = "-123.45"
if re.match(pattern, test_string):
    print("正負の数です。")
else:
    print("正負の数ではありません。")
正負の数です。

この正規表現は、整数と小数の両方を含む正負の数を判定します。

科学技術表記の数値を判定する正規表現

科学技術表記の数値を判定するための正規表現は、次のようになります。

import re
# 科学技術表記の数値を判定する正規表現
pattern = r'^[+-]?\d+(\.\d+)?[eE][+-]?\d+$'
test_string = "1.23e10"
if re.match(pattern, test_string):
    print("科学技術表記の数値です。")
else:
    print("科学技術表記の数値ではありません。")
科学技術表記の数値です。

この正規表現は、科学技術表記(例:1.23e10)を判定します。

数字以外の文字列を含む場合の対処法

数字以外の文字列を含む場合、正規表現を使ってその部分を除去することができます。

以下の例では、数字以外の文字を削除します。

import re
# 数字以外の文字を除去する
test_string = "abc123def456"
result = re.sub(r'\D', '', test_string)
print("数字のみ:", result)
数字のみ: 123456

このコードでは、\Dを使用して数字以外の文字をすべて削除し、数字のみを抽出しています。

Pythonでの実装例

ここでは、Pythonを使用してさまざまな数値形式を判定するための具体的なコード例を示します。

正規表現を活用して、整数、小数、正負の数、科学技術表記の数値を判定する方法を解説します。

整数かどうかを判定するコード例

整数を判定するためのコードは以下の通りです。

import re
def is_integer(value):
    pattern = r'^[+-]?\d+$'
    return bool(re.match(pattern, value))
# テスト
test_values = ["123", "-456", "+789", "12.34", "abc"]
results = {value: is_integer(value) for value in test_values}
print(results)
{'123': True, '-456': True, '+789': True, '12.34': False, 'abc': False}

この関数は、与えられた文字列が整数かどうかを判定し、結果を辞書形式で返します。

小数かどうかを判定するコード例

小数を判定するためのコードは以下の通りです。

import re
def is_float(value):
    pattern = r'^[+-]?(\d+(\.\d*)?|\.\d+)$'
    return bool(re.match(pattern, value))
# テスト
test_values = ["123.45", "-0.67", "+.89", "123", "abc"]
results = {value: is_float(value) for value in test_values}
print(results)
{'123.45': True, '-0.67': True, '+.89': True, '123': False, 'abc': False}

この関数は、与えられた文字列が小数かどうかを判定し、結果を辞書形式で返します。

正負の数を判定するコード例

正負の数を判定するためのコードは以下の通りです。

import re
def is_signed_number(value):
    pattern = r'^[+-]?\d+(\.\d+)?$'
    return bool(re.match(pattern, value))
# テスト
test_values = ["-123.45", "+678", "0", "abc", "12.34.56"]
results = {value: is_signed_number(value) for value in test_values}
print(results)
{'-123.45': True, '+678': True, '0': True, 'abc': False, '12.34.56': False}

この関数は、与えられた文字列が正負の数かどうかを判定し、結果を辞書形式で返します。

科学技術表記の数値を判定するコード例

科学技術表記の数値を判定するためのコードは以下の通りです。

import re
def is_scientific_notation(value):
    pattern = r'^[+-]?\d+(\.\d+)?[eE][+-]?\d+$'
    return bool(re.match(pattern, value))
# テスト
test_values = ["1.23e10", "-4.56E-2", "3.14", "abc", "1.23e"]
results = {value: is_scientific_notation(value) for value in test_values}
print(results)
{'1.23e10': True, '-4.56E-2': True, '3.14': False, 'abc': False, '1.23e': False}

この関数は、与えられた文字列が科学技術表記の数値かどうかを判定し、結果を辞書形式で返します。

複数の数値形式を同時に判定する方法

複数の数値形式を同時に判定するためのコードは以下の通りです。

import re
def is_number(value):
    pattern = r'^[+-]?(\d+(\.\d*)?|\.\d+|(\d+(\.\d*)?[eE][+-]?\d+))$'
    return bool(re.match(pattern, value))
# テスト
test_values = ["123", "-456.78", "3.14e10", "abc", "12.34.56"]
results = {value: is_number(value) for value in test_values}
print(results)
{'123': True, '-456.78': True, '3.14e10': True, 'abc': False, '12.34.56': False}

この関数は、与えられた文字列が整数、小数、正負の数、または科学技術表記の数値のいずれかであるかを判定し、結果を辞書形式で返します。

応用例:文字列中の数字を抽出する

正規表現を使用すると、文字列から特定の形式の数値を抽出したり、数字以外の文字を除去したりすることができます。

ここでは、具体的な方法をいくつか紹介します。

文字列からすべての数字を抽出する方法

文字列からすべての数字を抽出するには、次のようなコードを使用します。

import re
def extract_all_numbers(text):
    # すべての数字を抽出
    return re.findall(r'\d+', text)
# テスト
test_string = "abc123def456ghi789"
numbers = extract_all_numbers(test_string)
print("抽出した数字:", numbers)
抽出した数字: ['123', '456', '789']

この関数は、与えられた文字列からすべての数字をリスト形式で抽出します。

文字列中の特定の形式の数値を抽出する方法

特定の形式の数値(例えば、小数や科学技術表記)を抽出するには、次のようなコードを使用します。

import re
def extract_specific_numbers(text):
    # 小数と科学技術表記の数値を抽出
    return re.findall(r'[+-]?(\d+(\.\d*)?|\.\d+|(\d+(\.\d*)?[eE][+-]?\d+))', text)
# テスト
test_string = "値は3.14、1.23e10、そして-4.56です。"
numbers = extract_specific_numbers(test_string)
print("抽出した特定の数値:", [num[0] for num in numbers])
抽出した特定の数値: ['3.14', '1.23e10', '-4.56']

この関数は、与えられた文字列から小数と科学技術表記の数値を抽出します。

数字以外の文字列を除去する方法

数字以外の文字列を除去して、数字のみを残す方法は次の通りです。

import re
def remove_non_digits(text):
    # 数字以外の文字を除去
    return re.sub(r'\D', '', text)
# テスト
test_string = "abc123def456ghi789"
result = remove_non_digits(test_string)
print("数字のみ:", result)
数字のみ: 123456789

この関数は、与えられた文字列から数字以外の文字をすべて除去し、数字のみを返します。

数字の範囲を指定して抽出する方法

特定の範囲内の数字を抽出するには、次のようなコードを使用します。

import re
def extract_numbers_in_range(text, min_value, max_value):
    # 数字を抽出し、範囲内のものだけをフィルタリング
    numbers = re.findall(r'\d+', text)
    return [num for num in numbers if min_value <= int(num) <= max_value]
# テスト
test_string = "値は10、20、30、40、50です。"
result = extract_numbers_in_range(test_string, 20, 40)
print("範囲内の数字:", result)
範囲内の数字: ['20', '30', '40']

この関数は、与えられた文字列から数字を抽出し、指定した範囲内の数字のみをリスト形式で返します。

応用例:入力データのバリデーション

ユーザーからの入力データを正確に検証することは、プログラムの信頼性を高めるために重要です。

ここでは、Pythonを使用してユーザー入力が特定の数値形式に合致するかどうかを確認する方法を紹介します。

ユーザー入力が整数かどうかを確認する

ユーザーが入力した値が整数かどうかを確認するためのコードは以下の通りです。

import re
def validate_integer(user_input):
    pattern = r'^[+-]?\d+$'
    if re.match(pattern, user_input):
        return True
    return False
# テスト
user_input = input("整数を入力してください: ")
if validate_integer(user_input):
    print("入力は整数です。")
else:
    print("入力は整数ではありません。")

この関数は、ユーザーが入力した値が整数形式であるかどうかを判定します。

ユーザー入力が小数かどうかを確認する

ユーザーが入力した値が小数かどうかを確認するためのコードは以下の通りです。

import re
def validate_float(user_input):
    pattern = r'^[+-]?(\d+(\.\d*)?|\.\d+)$'
    if re.match(pattern, user_input):
        return True
    return False
# テスト
user_input = input("小数を入力してください: ")
if validate_float(user_input):
    print("入力は小数です。")
else:
    print("入力は小数ではありません。")

この関数は、ユーザーが入力した値が小数形式であるかどうかを判定します。

ユーザー入力が正負の数かどうかを確認する

ユーザーが入力した値が正負の数かどうかを確認するためのコードは以下の通りです。

import re
def validate_signed_number(user_input):
    pattern = r'^[+-]?\d+(\.\d+)?$'
    if re.match(pattern, user_input):
        return True
    return False
# テスト
user_input = input("正負の数を入力してください: ")
if validate_signed_number(user_input):
    print("入力は正負の数です。")
else:
    print("入力は正負の数ではありません。")

この関数は、ユーザーが入力した値が正負の数形式であるかどうかを判定します。

ユーザー入力が数値以外を含んでいないか確認する

ユーザーが入力した値が数値以外を含んでいないかを確認するためのコードは以下の通りです。

import re
def validate_numeric_only(user_input):
    pattern = r'^\d+$'
    if re.match(pattern, user_input):
        return True
    return False
# テスト
user_input = input("数値のみを入力してください: ")
if validate_numeric_only(user_input):
    print("入力は数値のみです。")
else:
    print("入力には数値以外の文字が含まれています。")

この関数は、ユーザーが入力した値が数値のみで構成されているかどうかを判定します。

よくある質問

re.match()とre.fullmatch()の違いは何ですか?

re.match()re.fullmatch()は、どちらも正規表現を使用して文字列を検査するための関数ですが、動作が異なります。

  • re.match(): 文字列の先頭から正規表現に一致する部分を探します。

文字列全体が一致する必要はなく、先頭部分が一致すればマッチと見なされます。

  • re.fullmatch(): 文字列全体が正規表現に一致するかどうかを確認します。

文字列全体がパターンに一致しない限り、マッチとは見なされません。

import re
text = "123abc"
print(re.match(r'\d+', text))  # マッチする(先頭部分が数字)
print(re.fullmatch(r'\d+', text))  # マッチしない(全体が数字ではない)

小数点を含む数値を判定するにはどうすればいいですか?

小数点を含む数値を判定するためには、正規表現を使用して小数のパターンを定義する必要があります。

以下のような正規表現を使用できます。

pattern = r'^[+-]?(\d+(\.\d*)?|\.\d+)$'

このパターンは、整数部と小数部の両方を考慮し、オプションで符号を持つ小数を判定します。

具体的な実装は、前述の「小数を判定するコード例」を参照してください。

科学技術表記の数値を判定する正規表現はありますか?

はい、科学技術表記の数値を判定するための正規表現も存在します。

以下のようなパターンを使用できます。

pattern = r'^[+-]?\d+(\.\d+)?[eE][+-]?\d+$'

この正規表現は、科学技術表記(例:1.23e10や-4.56E-2)を判定するために設計されています。

具体的な実装は、前述の「科学技術表記の数値を判定するコード例」を参照してください。

まとめ

この記事では、Pythonにおける正規表現を使用して、さまざまな数値形式を判定する方法や、文字列から数字を抽出する技術について詳しく解説しました。

特に、整数、小数、正負の数、科学技術表記の数値を判定するための具体的なコード例を示し、ユーザー入力のバリデーション方法についても触れました。

これらの知識を活用して、実際のプログラムにおけるデータ処理や入力検証をより効率的に行えるようになるでしょう。

正規表現を使った数値の判定や抽出を実践し、あなたのプログラミングスキルをさらに向上させてみてください。

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