You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式匹配结果复用问题:替换时如何拆分匹配数字段?

正则复用匹配结果实现文件名格式修改

问题分析

你当前的正则\d{6}(?:.pdf)存在三个问题:

  1. 非捕获组(?:...)不会保存匹配内容,没法在替换时复用;
  2. .是正则通配符,需要转义成\.才能准确匹配文件名里的点;
  3. 没有把6位数字拆分为「年(4位)」和「月(2位)」两个部分,无法实现插入横杠的需求。

解决方案

用捕获组把需要拆分的数字和后缀分别捕获,替换时引用捕获组内容即可:

核心正则与替换规则

  • 正则表达式:(\d{4})(\d{2})(\.pdf)
    • (\d{4}):捕获前4位数字(年份)
    • (\d{2}):捕获后2位数字(月份)
    • (\.pdf):捕获后缀.pdf(转义.避免匹配任意字符)
  • 替换模板:根据不同工具/语言,用\1-\2\3或$1-$2$3引用捕获组,其中\1/$1对应年份,\2/$2对应月份,\3/$3对应.pdf

实际代码示例

Python 实现
import re
original_name = "AB_C_DE01FGHI0123456789_XXX_202201.pdf"
modified_name = re.sub(r'(\d{4})(\d{2})(\.pdf)', r'\1-\2\3', original_name)
print(modified_name)  # 输出:AB_C_DE01FGHI0123456789_XXX_2022-01.pdf
Shell(sed 命令)实现
echo "AB_C_DE01FGHI0123456789_XXX_202201.pdf" | sed -E 's/([0-9]{4})([0-9]{2})(\.pdf)/\1-\2\3/'

关键说明

捕获组是正则复用匹配内容的核心,用()包裹的内容会按顺序编号,替换时通过编号就能调用对应匹配片段。如果只需要匹配但不需要复用某部分内容,才用非捕获组(?:...),这里我们需要拆分数字,所以必须用捕获组拆分年份和月份。

内容的提问来源于stack exchange,提问作者LVX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:05:20