文字列からすべての日付 (おそらく異なる形式で書かれている) を解析しようとしています。問題は、d/m -y
たとえば 22/11 -12 のように、この形式で日付が書き込まれる可能性があることです。しかし、年が指定されていないこの形式で書かれた日付もある可能性がありd/m
ます。この文字列で長い形式を含む日付が見つかった場合、短い形式で再び検出されることは望ましくありません。これは私のコードが失敗する場所です。最初の日付が 2 回検出されます (1 回は年があり、1 回は年がありません)。
本当に 2 つの質問があります: (1) これを行う「正しい」方法は何ですか。私はこの問題に間違った角度から取り組んでいるようです。(2) このやり方に固執しなければならない場合、なぜこの行datestring.replace(match.group(0), '')
は日付を削除しないので、二度と見つからないのでしょうか?
これは私のコードです:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
dformats = (
'(?P<day>\d{1,2})/(?P<month>\d{1,2}) -(?P<year>\d{2})',
'(?P<day>\d{1,2})/(?P<month>\d{1,2})',
'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',
)
def get_dates(datestring):
"""Try to extract all dates from certain strings.
Arguments:
- `datestring`: A string containing dates.
"""
global dformats
found_dates = []
for regex in dformats:
matches = re.finditer(regex, datestring)
for match in matches:
# Is supposed to make sure the same date is not found twice
datestring.replace(match.group(0), '')
found_dates.append(match)
return found_dates
if __name__ == '__main__':
dates = get_dates('1/2 -13, 5/3 & 2012-11-22')
for date in dates:
print date.groups()