Skip to main content
 首页 » 编程设计

python之正则表达式匹配 1980 年和 2050 年之间的年份

2025年05月04日62jackei

我希望使用正则表达式匹配句子中 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