使用正则命名捕获组解析含下划线的文件名求助
正则命名捕获组补充方案
完整正则表达式
^(?P<appcorresp>\d{5})_(?P<appnumber>\d{8})_(?P<date>\d{4}-\d{2}-\d{2})_(?P<doctype>TRAN\.LET|AP_DK_M)(?:_(\d{3}))?\.pdf$
关键补充说明
<doctype>分组实现:通过_(?P<doctype>TRAN\.LET|AP_DK_M)完成。下划线后匹配两种固定文档类型,注意TRAN.LET中的.需要转义为\.(正则中.默认匹配任意字符),用分支|分隔两种可选值。- 可选三位数字后缀处理:
(?:_(\d{3}))?是核心:(?:...)为非捕获组,避免额外生成不需要的捕获结果;_(\d{3})匹配下划线加三位随机数字;- 末尾的
?标记整个组为可选,兼容有无数字后缀的文件名。
- 首尾锚定:开头
^和结尾$确保正则匹配整个文件名,避免出现部分匹配的无效结果。
匹配验证
三个目标文件名均可成功匹配:
22203_17053180_2020-05-13_TRAN.LET_002.pdf:捕获doctype为TRAN.LET,可选数字后缀存在22203_17053180_2020-05-13_AP_DK_M_002.pdf:捕获doctype为AP_DK_M,可选数字后缀存在22203_17053180_2020-05-13_AP_DK_M.pdf:捕获doctype为AP_DK_M,可选数字后缀不存在
内容的提问来源于stack exchange,提问作者Olaru Mircea
相关产品推荐
相关产品推荐

