regex - 正则表达式贪婪匹配失败?
问题描述
在我需要匹配的其他行中,我有以下 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})$
)来匹配这两行,但是对于底部匹配的行,它没有给我月份值。
任何想法?
解决方案
如果不在月份名称中的所有字符都将是数字、破折号和空格,则显式匹配这些字符(例如:)[0-9\- ]*
而不是任何字符(例如:) .*
:
# 'anything goes' matched here
# v
^\d[0-9 \-]*(?<month>[a-zA-Z]{3})?\s(?<year>\d{4})$
推荐阅读
- python - Firebase 实时数据库添加/删除/更新/检索数据
- imagemagick - 使用缺失文件创建固定大小的图像蒙太奇
- android - 以编程方式在 Android 11 上启用 USB 网络共享
- xamarin.forms - 为标签页标签使用字体真棒图标
- javascript - 使用 Javascript 从段落中删除单词
- javascript - 我想从系列中删除值,以便图表不会混乱如何做到这一点
- c++ - constexpr 是新的内联吗?
- python - 如何在 Matplotlib 中设置月底的刻度线
- git - 将文件从 master 复制到新分支
- anaconda - 删除或修复损坏的 anaconda 安装