使用正则表达式匹配2010年之后日期的问题咨询
分析与修正你的日期匹配正则表达式
首先,你的正则表达式.*_(201\d{5})_.*无法正常工作,主要有两个核心问题:
1. 位数不匹配
目标日期是8位数字(比如示例里的20201103),但你的正则捕获的是201\d{5}——也就是201加上5位数字,总共7位,长度差了一位,自然匹配不上目标日期段。
2. 年份范围限制过窄
201\d只能匹配2010-2019年的日期,但你的示例日期是2020年的,这个正则连你的测试字符串都无法命中,更别说覆盖2020及之后的年份了。
修正后的正则表达式
如果你的需求是匹配格式为YYYYMMDD且年份在2010年及之后的日期(不严格校验月份和日期的合法性,比如不排除2月30号这类无效日期,这在文件名匹配场景里通常足够),可以使用以下正则:
.*_((201[0-9]\d{4})|(20[2-9]\d{5}))_.*
各部分解释:
201[0-9]\d{4}:匹配2010-2019年的日期(年份2010-2019,加上4位月日)20[2-9]\d{5}:匹配2020-2099年的日期(年份2020-2099,加上4位月日)- 外层的
.*_..._.*确保日期段被下划线包裹,符合你给出的文件名格式。
如果你需要覆盖更长远的年份(比如2100年及之后),可以扩展为:
.*_((201[0-9]\d{4})|(20[2-9]\d{5})|(2[1-9]\d{6})|([3-9]\d{7}))_.*
测试验证
用你的示例字符串path/32632/SMCS1_20201103_051803_095_D.tif测试修正后的正则,会成功捕获20201103这个符合要求的日期段。
内容的提问来源于stack exchange,提问作者Robin Kohrs
相关产品推荐
相关产品推荐

