re.findall只找到一半的模式

时间:2018-03-08 19:07:28

标签: python pattern-matching string-parsing

我正在使用re.findall来解析字符串中的年份和月份,但它只从字符串的一半输出模式。这是为什么?

date_string = '2011-1-1_2012-1-3,2015-3-1_2015-3-3'

find_year_and_month = re.findall('[1-2][0-9][0-9][0-9]-[1-12]', date_string)

print(find_year_and_month)

我的输出是这样的:

['2011-1', '2012-1']

这是这些日期的当前输出,但为什么我只得到一半字符串的模式匹配?

2 个答案:

答案 0 :(得分:0)

调整正则表达式模式,如下所示:

import re

date_string = '2011-1-1_2012-1-3,2015-3-1_2015-3-3'    
find_year_and_month = re.findall('([1-2][0-9]{3}-(?:1[0-2]|[1-9]))', date_string)

print(find_year_and_month)

输出:

['2011-1', '2012-1', '2015-3', '2015-3']

答案 1 :(得分:0)

[1-12]并不能按照您的想法行事。它匹配11范围内的任何内容,或者匹配2

请参阅此问题,了解一些替代正则表达式选项,例如([1-9]|1[0-2])How to represent regex number ranges (e.g. 1 to 12)?

如果您想要一个用于试验正则表达式的交互式工具,我个人推荐Regexr