[Python] 文字列から数字だけを抽出する方法
Pythonで文字列から数字だけを抽出するには、正規表現を使用する方法が一般的です。
re
モジュールのfindall()関数
を使うことで、文字列中の数字を簡単に取得できます。
例えば、re.findall(r'\d+', text)
は、文字列text
から連続する数字をリストとして抽出します。
また、リスト内の数字を結合して1つの文字列にするには、''.join()
を使います。
正規表現を使わない場合は、リスト内包表記でisdigit()
を使う方法もあります。
正規表現を使った数字の抽出方法
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()関数
を使って合計を計算しています。
これにより、簡単に数字の合計を求めることができます。
まとめ
この記事では、Pythonを使用して文字列から数字を抽出するさまざまな方法について詳しく解説しました。
正規表現や文字列メソッドを活用することで、特定の形式の数字を効率的に抽出し、その後のデータ処理も簡単に行えることがわかりました。
これらの技術を活用して、実際のプロジェクトやデータ分析に役立ててみてください。