我希望使用正则表达式匹配句子中 1980 年到 2050 年之间的年份。
到目前为止我使用:
def within_years(d):
return re.search('20[0-5][0-9]', d) or re.search('19[89][0-9]', d)
现在的问题是我也匹配“22015”。
所以我想在前面加上[^0-9],但是如果它在句子的开头,它就不能匹配年份。
下一步是添加[/-]*,但它仍然只是可选的。
一些例子:
should_match = ['2015 is a great year', 'best year: 2015']
should_not_match = ['22015 bogus', 'a2015 is not a year']
请您参考如下方法:
您可以使用单个正则表达式:
(19[89][0-9]|20[0-4][0-9]|2050)
你应该在它周围添加 \b 边界,以确保它们周围没有任何东西:
\b(19[89][0-9]|20[0-4][0-9]|2050)\b
>>> valid_year = re.compile(r'\b(19[89][0-9]|20[0-4][0-9]|2050)\b')
>>> should_match = ['2015 is a great year', 'best year: 2015']
>>> should_not_match = ['22015 bogus', 'a2015 is not a year']
>>> for s in should_match:
print(valid_year.search(s))
<_sre.SRE_Match object; span=(0, 4), match='2015'>
<_sre.SRE_Match object; span=(11, 15), match='2015'>
>>> for s in should_not_match:
print(valid_year.search(s))
None
None
