re.findall 只找到一半的模式
re.findall only finding half the patterns
我正在使用 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']
这是这些日期的当前输出,但为什么我只得到一半字符串的模式匹配?
如下所示调整您的正则表达式模式:
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-12]
并不像您想象的那样。它匹配 1
到 1
范围内的任何内容,或者匹配 2
.
请参阅此问题以获取一些替换正则表达式选项,例如 ([1-9]|1[0-2])
:How to represent regex number ranges (e.g. 1 to 12)?
如果你想要一个交互工具来试验正则表达式,我个人推荐Regexr。
我正在使用 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']
这是这些日期的当前输出,但为什么我只得到一半字符串的模式匹配?
如下所示调整您的正则表达式模式:
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-12]
并不像您想象的那样。它匹配 1
到 1
范围内的任何内容,或者匹配 2
.
请参阅此问题以获取一些替换正则表达式选项,例如 ([1-9]|1[0-2])
:How to represent regex number ranges (e.g. 1 to 12)?
如果你想要一个交互工具来试验正则表达式,我个人推荐Regexr。