使用python re进行正则表达式简化

时间:2016-10-25 00:57:20

标签: python regex

我需要匹配以下日期字符串:

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个单独的正则表达式,我希望将我的两个正则表达式简化为单个表达式。有什么建议吗?

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