首页 > 解决方案 > 正则表达式贪婪匹配失败?

问题描述

在我需要匹配的其他行中,我有以下 2 行。

2015 - 2016 2016 - 2017 2017 - 2018 2018 - 2019 2019 - 2020 2020 
2015 - 2016 2016 - 2017 2017 - 2018 2018 - 2019 2019 - 2020 APR 2021

顶部是能够匹配并获取年份值' 2020',底部是匹配并获取月份和年份值' APR 2021'。

我可以使用这个正则表达式(^\d.*(?<month>[a-zA-Z]{3})?\s(?<year>\d{4})$)来匹配这两行,但是对于底部匹配的行,它没有给我月份值。

任何想法?

这是 regex101.com的输出

标签: regex

解决方案


如果不在月份名称中的所有字符都将是数字、破折号和空格,则显式匹配这些字符(例如:)[0-9\- ]*而不是任何字符(例如:) .*

# 'anything goes' matched here
#     v
^\d[0-9 \-]*(?<month>[a-zA-Z]{3})?\s(?<year>\d{4})$

推荐阅读