[Python] 文字列から数字だけを抽出する方法

Pythonで文字列から数字だけを抽出するには、正規表現を使用する方法が一般的です。

reモジュールのfindall()関数を使うことで、文字列中の数字を簡単に取得できます。

例えば、re.findall(r'\d+', text)は、文字列textから連続する数字をリストとして抽出します。

また、リスト内の数字を結合して1つの文字列にするには、''.join()を使います。

正規表現を使わない場合は、リスト内包表記でisdigit()を使う方法もあります。

この記事でわかること
  • Pythonで数字を抽出する方法
  • 正規表現の基本的な使い方
  • 文字列メソッドによる数字の抽出
  • 特定の形式の数字を抽出する技術
  • 抽出後のデータ処理の手法

目次から探す

正規表現を使った数字の抽出方法

reモジュールのインポート

Pythonで正規表現を使用するためには、まずreモジュールをインポートする必要があります。

以下のように記述します。

import re

findall()関数を使った数字の抽出

findall()関数を使用すると、文字列からすべての数字を抽出することができます。

以下はそのサンプルコードです。

import re
text = "今日は2023年10月5日です。電話番号は090-1234-5678です。"
numbers = re.findall(r'\d+', text)  # \d+ は1つ以上の数字を意味します
print(numbers)
['2023', '10', '5', '090', '1234', '5678']

このコードでは、textに含まれるすべての数字をリストとして抽出しています。

複数の数字を結合して1つの文字列にする方法

抽出した数字を1つの文字列に結合するには、join()メソッドを使用します。

以下のサンプルコードを参照してください。

import re
text = "今日は2023年10月5日です。電話番号は090-1234-5678です。"
numbers = re.findall(r'\d+', text)
joined_numbers = ''.join(numbers)  # 数字を結合
print(joined_numbers)
202310509012345678

このコードでは、抽出した数字をすべて結合して1つの文字列にしています。

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

文字列から数字だけを残し、他の文字を除去する方法もあります。

以下のサンプルコードを見てみましょう。

import re
text = "abc123def456ghi789"
only_numbers = re.sub(r'\D', '', text)  # \D は数字以外の文字を意味します
print(only_numbers)
123456789

このコードでは、re.sub()を使って数字以外の文字を空文字に置き換えています。

正規表現のカスタマイズ例

正規表現はカスタマイズが可能で、特定のパターンにマッチする数字を抽出することもできます。

例えば、電話番号の形式にマッチさせる場合は以下のように記述します。

import re
text = "電話番号は090-1234-5678です。"
phone_numbers = re.findall(r'\d{3}-\d{4}-\d{4}', text)  # 電話番号の形式にマッチ
print(phone_numbers)
['090-1234-5678']

このコードでは、特定の形式(3桁-4桁-4桁)の電話番号を抽出しています。

正規表現を使うことで、さまざまなパターンに対応した数字の抽出が可能です。

文字列メソッドを使った数字の抽出方法

isdigit()メソッドの使い方

isdigit()メソッドは、文字列が数字のみで構成されているかどうかを判定するために使用します。

このメソッドを使って、文字列から数字を抽出することができます。

以下はそのサンプルコードです。

text = "abc123def456ghi789"
numbers = [char for char in text if char.isdigit()]  # 数字のみを抽出
print(numbers)
['1', '2', '3', '4', '5', '6', '7', '8', '9']

このコードでは、isdigit()メソッドを使って、文字列の各文字が数字かどうかを判定し、数字のみをリストに格納しています。

リスト内包表記を使った数字の抽出

リスト内包表記を使用すると、簡潔に数字を抽出することができます。

以下のサンプルコードを見てみましょう。

text = "今日は2023年10月5日です。"
numbers = [char for char in text if char.isdigit()]  # 数字のみを抽出
print(numbers)
['2', '0', '2', '3', '1', '0', '5']

このコードでは、isdigit()メソッドを使って、文字列から数字を抽出し、リストに格納しています。

filter()関数を使った数字の抽出

filter()関数を使用すると、条件に合った要素を抽出することができます。

以下はそのサンプルコードです。

text = "abc123def456ghi789"
numbers = list(filter(str.isdigit, text))  # 数字のみを抽出
print(numbers)
['1', '2', '3', '4', '5', '6', '7', '8', '9']

このコードでは、filter()関数を使って、文字列から数字を抽出し、リストに変換しています。

join()メソッドで数字を結合する方法

抽出した数字を1つの文字列に結合するには、join()メソッドを使用します。

以下のサンプルコードを参照してください。

text = "abc123def456ghi789"
numbers = [char for char in text if char.isdigit()]
joined_numbers = ''.join(numbers)  # 数字を結合
print(joined_numbers)
123456789

このコードでは、抽出した数字をjoin()メソッドを使って1つの文字列に結合しています。

これにより、数字を簡単に扱うことができます。

応用例:文字列から特定の形式の数字を抽出する

電話番号の抽出

日本の電話番号形式(例:090-1234-5678)を抽出するには、正規表現を使用します。

以下のサンプルコードを参照してください。

import re
text = "私の電話番号は090-1234-5678です。"
phone_numbers = re.findall(r'\d{3}-\d{4}-\d{4}', text)  # 電話番号の形式にマッチ
print(phone_numbers)
['090-1234-5678']

このコードでは、正規表現を使って電話番号の形式にマッチする部分を抽出しています。

郵便番号の抽出

日本の郵便番号形式(例:123-4567)を抽出する方法も正規表現を使用します。

以下のサンプルコードを見てみましょう。

import re
text = "私の住所は東京都123-4567です。"
postal_codes = re.findall(r'\d{3}-\d{4}', text)  # 郵便番号の形式にマッチ
print(postal_codes)
['123-4567']

このコードでは、郵便番号の形式にマッチする部分を抽出しています。

日付形式の数字を抽出する方法

日付形式(例:2023/10/05)を抽出するには、以下のように正規表現を使用します。

import re
text = "今日は2023/10/05です。"
dates = re.findall(r'\d{4}/\d{1,2}/\d{1,2}', text)  # 日付の形式にマッチ
print(dates)
['2023/10/05']

このコードでは、年/月/日の形式にマッチする部分を抽出しています。

小数点を含む数字の抽出

小数点を含む数字(例:3.14)を抽出するには、以下のように正規表現を使用します。

import re
text = "円周率は約3.14です。"
decimal_numbers = re.findall(r'\d+\.\d+', text)  # 小数点を含む数字にマッチ
print(decimal_numbers)
['3.14']

このコードでは、小数点を含む数字を抽出しています。

負の数を含む数字の抽出

負の数(例:-5)を抽出するには、以下のように正規表現を使用します。

import re
text = "温度は-5度です。"
negative_numbers = re.findall(r'-?\d+', text)  # 負の数を含む数字にマッチ
print(negative_numbers)
['-5']

このコードでは、負の数を含む数字を抽出しています。

-?は負の符号がある場合にマッチすることを意味します。

これにより、正の数と負の数の両方を抽出することができます。

数字抽出後のデータ処理

抽出した数字を整数に変換する方法

抽出した数字は通常、文字列として扱われます。

これを整数に変換するには、int()関数を使用します。

以下のサンプルコードを参照してください。

import re
text = "今日は2023年10月5日です。"
numbers = re.findall(r'\d+', text)  # 数字を抽出
int_numbers = [int(num) for num in numbers]  # 文字列を整数に変換
print(int_numbers)
[2023, 10, 5]

このコードでは、抽出した数字をリスト内包表記を使って整数に変換しています。

抽出した数字をリストに格納する方法

抽出した数字をリストに格納するのは、findall()関数を使用することで簡単に行えます。

以下のサンプルコードを見てみましょう。

import re
text = "abc123def456ghi789"
numbers = re.findall(r'\d+', text)  # 数字を抽出
number_list = [int(num) for num in numbers]  # 整数に変換してリストに格納
print(number_list)
[123, 456, 789]

このコードでは、抽出した数字を整数に変換し、リストに格納しています。

抽出した数字をソートする方法

抽出した数字をソートするには、sorted()関数を使用します。

以下のサンプルコードを参照してください。

import re
text = "abc123def456ghi789"
numbers = re.findall(r'\d+', text)  # 数字を抽出
number_list = [int(num) for num in numbers]  # 整数に変換
sorted_numbers = sorted(number_list)  # ソート
print(sorted_numbers)
[123, 456, 789]

このコードでは、抽出した数字を整数に変換した後、sorted()関数を使ってソートしています。

抽出した数字を合計する方法

抽出した数字の合計を計算するには、sum()関数を使用します。

以下のサンプルコードを見てみましょう。

import re
text = "abc123def456ghi789"
numbers = re.findall(r'\d+', text)  # 数字を抽出
number_list = [int(num) for num in numbers]  # 整数に変換
total = sum(number_list)  # 合計を計算
print(total)
1368

このコードでは、抽出した数字を整数に変換した後、sum()関数を使って合計を計算しています。

これにより、簡単に数字の合計を求めることができます。

よくある質問

isdigit()と正規表現の違いは?

isdigit()メソッドは、文字列が数字のみで構成されているかどうかを判定するためのメソッドです。

これは、各文字が数字であるかを確認するために使用されます。

一方、正規表現は、より複雑なパターンマッチングを行うための強力なツールです。

正規表現を使用すると、特定の形式(例えば、電話番号や郵便番号)にマッチする数字を抽出することができます。

つまり、isdigit()は単純な判定に適しており、正規表現は柔軟で多様なパターンに対応できるという違いがあります。

小数点やマイナス記号を含む数字はどう抽出する?

小数点やマイナス記号を含む数字を抽出するには、正規表現を使用するのが効果的です。

例えば、小数点を含む数字を抽出する場合は、\d+\.\d+というパターンを使用します。

また、負の数を含む場合は、-?\d+(\.\d+)?というパターンを使うことで、負の符号があるかどうかを考慮した抽出が可能です。

これにより、正の数、負の数、小数点を含む数をすべて抽出することができます。

数字が含まれていない場合の処理は?

数字が含まれていない場合の処理は、抽出結果を確認することで行います。

例えば、findall()関数を使用して数字を抽出した後、結果が空のリストであるかどうかをチェックします。

もし空であれば、適切なメッセージを表示したり、デフォルト値を設定したりすることができます。

以下のようなコードで処理できます。

import re
text = "数字は含まれていません。"
numbers = re.findall(r'\d+', text)  # 数字を抽出
if not numbers:
    print("数字が含まれていません。")
else:
    print(numbers)

このコードでは、数字が含まれていない場合にメッセージを表示しています。

これにより、ユーザーに対して明確なフィードバックを提供することができます。

まとめ

この記事では、Pythonを使用して文字列から数字を抽出するさまざまな方法について詳しく解説しました。

正規表現や文字列メソッドを活用することで、特定の形式の数字を効率的に抽出し、その後のデータ処理も簡単に行えることがわかりました。

これらの技術を活用して、実際のプロジェクトやデータ分析に役立ててみてください。

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