我正在尝试从字符串中解析出所有日期(可能以不同的形式编写)。问题是可能有一个日期以这种形式写d/m -y
,例如 22/11 -12。但也可以用这种形式写一个d/m
没有指定年份的日期。如果我在此字符串中找到包含较长形式的日期,我不希望再次以较短的形式找到它。这是我的代码失败的地方,它两次找到第一个日期(一次有年份,一次没有年份)。
我真的有两个问题:(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()