Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの正規表現を使ってテキストから日付を抽出する方法

Pythonでは、reモジュール(正規表現ライブラリ)とdatetimeモジュールを組み合わせることで、文字列から特定の形式の日付を簡単に抽出できます。本記事では、テキスト内から「YYYY-MM-DD」形式の日付を見つけ出し、dateオブジェクトとして取得する方法を解説します。

基本的な実装例

以下のコードは、正規表現を使って与えられた文字列から日付部分を抽出する例です。

import datetime
from datetime import date
import re

s = "Jason's birthday is on 1991-09-21"
match = re.search(r'\d{4}-\d{2}-\d{2}', s)
date = datetime.datetime.strptime(match.group(), '%Y-%m-%d').date()
print(date)

実行結果

このコードを実行すると、次の出力が得られます。

1991-09-21

コードの解説

1. 正規表現パターン「\d{4}-\d{2}-\d{2}」について

re.search()関数に渡しているパターンの意味は以下の通りです。

  • \d{4}:4桁の数字(年)にマッチ
  • -:ハイフンにマッチ
  • \d{2}:2桁の数字(月・日)にマッチ

このパターンにより、「1991-09-21」のような形式の日付が文字列中から検索されます。

2. strptime()でdateオブジェクトへ変換

正規表現で抽出した結果は文字列なので、datetime.strptime()を使って日付データへ変換しています。フォーマット指定子 '%Y-%m-%d' は「年-月-日」の並びを示します。最後に .date() を呼び出すことで、時刻情報を含まない純粋なdateオブジェクトが取得できます。

注意点

  • re.search()は最初にマッチした箇所のみを返します。文字列内に複数の日付がある場合はre.findall()re.finditer()の使用を検討してください。
  • マッチが見つからなかった場合、matchNoneになるため、実際のコードではif match:によるチェックを入れると安全です。
  • 「YYYY/MM/DD」など別の形式に対応したい場合は、パターンをr'\d{4}/\d{2}/\d{2}'のように変更し、strptimeのフォーマットも合わせて調整してください。

このように、正規表現とdatetimeモジュールを組み合わせれば、自由形式のテキストから日付情報を柔軟に取り出すことができます。

  1. Pythonのdatetimeモジュールで現在の日付から6か月後の日付を計算する方法

    Pythonで現在の日付から6か月後の日付を計算する方法Pythonのdatetimeモジュールには、日付の加減算を行うためのtimedeltaクラスが用意されています。これを使えば、現在の日付に一定の日数を加算し、6か月後のおおよその日付を簡単に求めることができます。timedeltaを使った基本的な計算方法>>> import datetime>>> today = datetime.date.today()>>> print(today)2017-09-12>>> six_months_later = today +

  2. 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