Python正则:匹配列表中指定数字在第二个下划线至.tif间的路径
正则表达式匹配指定数字的文件路径解决方案
问题背景
现有文件路径列表:
list_paths=imgs/foldeer/img_ABC_21389_1.tif.tif, imgs/foldeer/img_ABC_15431_10.tif.tif, imgs/foldeer/img_GHC_561321_2.tif.tif, imgs_foldeer/img_BCL_871125_21.tif.tif, ...
需求:遍历路径列表,匹配指定数字单独出现在第一个.tif前、且被下划线和小数点包围的完整路径。例如:
- 指定数字1时,仅匹配
imgs/foldeer/img_ABC_21389_1.tif.tif - 指定数字2时,仅匹配
imgs/foldeer/img_GHC_561321_2.tif.tif
此前尝试的正则[^_]+\.[^_]+\_([0-9])无匹配结果,还会误匹配包含目标数字的多位数(比如指定1时命中10)。
正确正则方案
针对指定数字N,使用以下正则表达式:
^.*_{N}\.tif\.tif$
正则解释
^:锚定字符串开头,确保匹配完整路径.*:匹配路径前缀的任意内容,适配不同目录结构_{N}\.:精确匹配_N.(N为指定数字,.需转义避免被当作通配符),确保目标数字是单独的部分,不会匹配包含该数字的多位数tif\.tif$:锚定字符串结尾,确保路径以.tif.tif结束
示例验证
- 指定数字1时,正则为
^.*_1\.tif\.tif$,仅匹配imgs/foldeer/img_ABC_21389_1.tif.tif,排除imgs/foldeer/img_ABC_15431_10.tif.tif - 指定数字2时,正则为
^.*_2\.tif\.tif$,仅匹配imgs/foldeer/img_GHC_561321_2.tif.tif,排除imgs_foldeer/img_BCL_871125_21.tif.tif
原正则问题分析
之前的正则[^_]+\.[^_]+\_([0-9])存在两个核心问题:
- 匹配结构与实际路径不契合,无法覆盖完整路径的前缀部分,导致无匹配结果
- 仅匹配单个数字但未限制数字的前后边界,会误匹配包含目标数字的多位数
内容的提问来源于stack exchange,提问作者Reut
相关产品推荐
相关产品推荐

