我需要匹配以下日期字符串:
release_date1 = 'July 29, 2016'
release_date2 = 'August 2016'
res = re.match(r'(\w+)\s(\d+),\s(\d+)$', release_date1)
if res:
datestr = res.group(1) + '-' + res.group(2) + '-' + res.group(3)
res = re.match(r'(\w+)\s(\d+)$', release_date2)
if res:
datestr = res.group(1) + '-01-' + res.group(2)
目前我有2个单独的正则表达式,我希望将我的两个正则表达式简化为单个表达式。有什么建议吗?
答案 0 :(得分:1)
肮脏的解决方案但会匹配两者:
'\w+\s[\d,\s]*[\d]{4}'
您也可以考虑使用or
运算符|
,这样可以获得更精确的结果:
'(\w+\s[\d]{2},\s|\w+\s)*[\d]{4}'
答案 1 :(得分:1)
替代解决方案
release_date1 = 'July 29, 2016'
release_date2 = 'August 2016'
def grab_date(date1):
# (\d+(?=,\s))? match day follow by (,space) if there is any
# (?:,\s)? non capturing match (,space) if there day in date
res = re.match('(\w+)\s(\d+(?=,\s))?(?:,\s)?(\d+)$', date1).groups()
datestr = res[0] + '-' + str(res[1]).replace('None','01') + '-' + res[2]
return datestr
print grab_date(release_date1) # July-29-2016
print grab_date(release_date2) # August-01-2016