使用Python正则表达式区分含update与不含update的指定格式字符串
我来帮你针对这两种文件名格式,写出精准的正则表达式,先拆解下你的文件名固定结构:
- 不含
update的格式:Beta_Gambus_teta_{可变字符串}_{日期}.ctr - 含
update的格式:Beta_Gambus_teta_{可变字符串}_update_{日期}.ctr
1. 匹配不含update的字符串
使用这个正则表达式:
^Beta_Gambus_teta_([^_]+)_(\d{4}\.\d{2}\.\d{4})\.ctr$
各部分作用说明:
^Beta_Gambus_teta_:锁定开头的固定前缀,避免匹配其他无关文件名([^_]+):精准捕获可变字符串,[^_]+表示匹配任意非下划线的字符(刚好卡在可变字符串后的下划线前,不会多匹配)_(\d{4}\.\d{2}\.\d{4}):捕获日期部分,\d{4}\.\d{2}\.\d{4}完美匹配YYYY.MM.DDDD的日期格式\.ctr$:锁定结尾的.ctr后缀,确保只匹配目标文件类型
测试示例:匹配Beta_Gambus_teta_wqtr_2017.02.1276.ctr时,捕获组1为wqtr,捕获组2为2017.02.1276
2. 匹配含update的字符串
使用这个正则表达式:
^Beta_Gambus_teta_([^_]+)_update_(\d{4}\.\d{2}\.\d{4})\.ctr$
各部分作用说明:
- 前半段
^Beta_Gambus_teta_([^_]+)和上面一致,负责捕获可变字符串 _update_:精准匹配中间的update标识,确保只筛选带该关键词的文件- 后半段的日期和后缀规则和不含
update的版本完全一致
测试示例:匹配Beta_Gambus_teta_wqtr_update_2017.02.1277.ctr时,捕获组1为wqtr,捕获组2为2017.02.1277
为什么你原来的正则不行?
你之前用的^.+_(.+)\.ctr$里,.+是贪婪匹配模式,会从文件名开头一直匹配到最后一个下划线的位置,导致把update和日期部分也包含进捕获内容里,范围太宽泛。而我们用[^_]+限制了可变字符串的匹配边界,就解决了这个问题。
内容的提问来源于stack exchange,提问作者user3541631
相关产品推荐
相关产品推荐

