Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách trích xuất ngày tháng (date) từ văn bản bằng Python Regex

Dùng regex tìm pattern ngày tháng (YYYY-MM-DD, DD/MM/YYYY, v.v.) trong text, sau đó parse sang datetime.date object.

Ví dụ: Extract ISO date (YYYY-MM-DD)

import re
from datetime import datetime

text = "Jason's birthday is on 1991-09-21"

# Pattern: 4 digits - 2 digits - 2 digits
match = re.search(r'\d{4}-\d{2}-\d{2}', text)

if match:
    date_str = match.group()
    # Parse sang date object
    date_obj = datetime.strptime(date_str, '%Y-%m-%d').date()
    print(date_obj)  # 1991-09-21
    print(type(date_obj))  # 

Kết quả


1991-09-21

Các pattern ngày tháng phổ biến

FormatRegex Patternstrptime format
YYYY-MM-DD\d{4}-\d{2}-\d{2}%Y-%m-%d
DD/MM/YYYY\d{2}/\d{2}/\d{4}%d/%m/%Y
MM/DD/YYYY\d{2}/\d{2}/\d{4}%m/%d/%Y
DD-MM-YYYY\d{2}-\d{2}-\d{4}%d-%m-%Y
Month name\d{1,2}\s+(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\s+\d{4}%d %b %Y

Extract nhiều ngày


text = "Meetings: 2024-01-15, 2024-02-20, 2024-03-10"
dates = re.findall(r'\d{4}-\d{2}-\d{2}', text)
date_objects = [datetime.strptime(d, '%Y-%m-%d').date() for d in dates]
print(date_objects)
# [datetime.date(2024, 1, 15), datetime.date(2024, 2, 20), datetime.date(2024, 3, 10)]

Validate ngày hợp lệ (regex không đủ)

Regex chỉ kiểm tra format. Ngày như 2024-02-31 hoặc 2023-02-29 pass regex nhưng invalid. Cần parse bằng strptime (sẽ raise ValueError nếu invalid):


def extract_valid_dates(text, pattern=r'\d{4}-\d{2}-\d{2}', fmt='%Y-%m-%d'):
    dates = []
    for match in re.finditer(pattern, text):
        try:
            dates.append(datetime.strptime(match.group(), fmt).date())
        except ValueError:
            pass  # Invalid date (Feb 31, etc.)
    return dates