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.search(r'\d{4}-\d{2}-\d{2}', s)
date = datetime.datetime.strptime(match.group(), '%Y-%m-%d').date()
print(date)ポイントとして、re.search() の第1引数には raw 文字列(r'')を使用するとよいでしょう。バックスラッシュのエスケープ処理が不要になり、正規表現が読みやすくなります。また、上記のコードはPython 3の構文(print関数)で記述しています。
実行結果
2018-12-10
strptimeの主な書式指定子
strptime() の第2引数では、対象となる日付のフォーマットを指定します。主な書式指定子は以下の通りです。
- %Y:4桁の西暦年(例:2018)
- %m:2桁の月(01〜12)
- %d:2桁の日(01〜31)
補足:形式が不明な場合はdateutilが便利
日付の形式が事前にわからない場合は、サードパーティライブラリ「python-dateutil」の parser を使うと、さまざまな形式の日付を自動的に解析できます。
from dateutil import parser
date = parser.parse("2018-12-10")
print(date) # 2018-12-10 00:00:00
-
Pythonで文字列から部分文字列を抽出する方法|正規表現のグループキャプチャ活用
正規表現のグループキャプチャを使った部分文字列の抽出 Pythonで文字列の中から特定の部分文字列を取り出したい場合、reモジュールの正規表現における「グループキャプチャ」を利用するのが効果的です。この手法を使うには、抽出したい部分文字列のフォーマットや、その前後の文脈をある程度把握しておく必要があります。 例えば、文章の中から「$xxx,xxx.xx」という形式で書かれた金額情報を抽出したいとします。その場合は、re.search()と括弧で囲んだキャプチャグループを次のように組み合わせます。 import re text = The phone is priced at $15,745.
-
Pythonで文字列から数字を抽出する方法【isdigitと正規表現の使い分け】
正の整数だけを抽出するシンプルな方法文字列に含まれる正の整数だけを取り出したい場合は、split()で空白ごとに文字列を分割し、isdigit()で各要素が数字のみで構成されているかを判定する方法が手軽です。>>> s = h3110 23 cat 444.4 rabbit 11 2 dog >>> [int(x) for x in s.split() if x.isdigit()] [23, 11, 2]この方法では、すべてが数字で構成された要素だけが整数に変換されてリストに追加されます。そのため「h3110」のように文字と数字が混ざった語句や、「444.