如何用正则让ExtractId与FileName捕获同一中间字段值?
解决方案
问题分析
你当前的正则表达式错误地将前缀ABC捕获为ExtractId,而需求是让ExtractId和FileName都捕获文件名中间的目标段(如ALL、Intra1等)。
正确正则表达式
要实现两个命名组捕获同一内容,可使用嵌套命名组的方式,让两个组指向同一匹配位置:
^ABC_(?<ExtractId>(?<FileName>[a-zA-Z0-9]+))_(?<FileDate>\d{8})T.*\.zip$
正则说明
^ABC_:匹配文件名开头的固定前缀,确保只处理符合格式的文件(?<ExtractId>(?<FileName>[a-zA-Z0-9]+)):嵌套命名组,内层FileName捕获中间的目标字符串,外层ExtractId同步捕获完全相同的内容_(?<FileDate>\d{8}):匹配下划线后,捕获8位数字的日期部分T.*\.zip$:匹配日期后的T字符及后续内容,直到结尾的.zip后缀,确保文件名完整匹配
匹配结果测试
以ABC_ALL_20230508T050011.zip为例,匹配结果为:
ExtractId = ALL FileName = ALL FileDate = 20230508
其余三个文件名的匹配结果均符合你的预期。
内容的提问来源于stack exchange,提问作者JohnTech
相关产品推荐
相关产品推荐

