Pythonの正規表現を使って文字列から最大の数値を抽出する方法
はじめに
Pythonの正規表現(regex)を使って文字列から最大の数値を抽出する最も簡単な方法は、以下の2ステップです。
- reモジュールを使って、文字列内のすべての数値を抽出する
- 抽出した数値の中から最大値を見つける
具体例
たとえば、次のような入力文字列があるとします。
「この都市には121005人が住んでおり、隣の都市には1587469人、遠く離れた都市には18775994人が住んでいます。」
この文字列から得られるべき出力は次のとおりです。
18775994
正規表現「\d+」の使い方
文字列内のすべての数値を検索するには、「\d+」という正規表現パターンを使用します。「\d」は1桁の数字(digit)を意味し、直後のプラス記号(+)は「1回以上の連続した繰り返し」を表すため、連続する数字のかたまり(最長の数値)をまとめて取得できます。
Pythonでは標準ライブラリの re パッケージを使って、以下のように実装できます。
import re
# 文字列からすべての数値を抽出する
occ = re.findall("\d+", "この都市には121005人が住んでおり、隣の都市には1587469人、遠く離れた都市には18775994人が住んでいます。")
# 抽出した数値を文字列からint型に変換する
num_list = map(int, occ)
# 最大値を見つけて表示する
print(max(num_list))実行結果
このコードを実行すると、次の出力が得られます。
18775994
コードのポイント解説
- re.findall():パターンに一致するすべての部分をリストとして返します。ここでは ["121005", "1587469", "18775994"] のような文字列のリストが取得されます。
- map(int, occ):抽出された数値は文字列型なので、max() で正しく比較するために int 型へ変換しています。
- max():変換後の数値リストから最大値を取得します。
なお、map() の代わりにリスト内包表記 [int(x) for x in occ] を使っても同じ結果が得られます。状況に応じて読みやすい書き方を選択するとよいでしょう。
-
Pythonで文字列から日付を抽出・解析する方法
文字列から日付を抽出するには、まずその文字列内で日付がどのような形式(フォーマット)で表現されているかを把握しておく必要があります。基本的なアプローチとしては、正規表現(reモジュール)で日付部分を取り出し、datetime.datetime.strptime() で解析(パース)するという流れになります。例えば、文字列中に「YYYY-MM-DD」形式の日付が含まれている場合、以下のコードで抽出と解析ができます。コード例import re import datetime s = I have a meeting on 2018-12-10 in New York match = re.sea
-
Pythonで文字列から部分文字列を抽出する方法|正規表現のグループキャプチャ活用
正規表現のグループキャプチャを使った部分文字列の抽出 Pythonで文字列の中から特定の部分文字列を取り出したい場合、reモジュールの正規表現における「グループキャプチャ」を利用するのが効果的です。この手法を使うには、抽出したい部分文字列のフォーマットや、その前後の文脈をある程度把握しておく必要があります。 例えば、文章の中から「$xxx,xxx.xx」という形式で書かれた金額情報を抽出したいとします。その場合は、re.search()と括弧で囲んだキャプチャグループを次のように組み合わせます。 import re text = The phone is priced at $15,745.