匹配1-3个下划线分隔数字的正则语法及匹配异常求助
正则表达式问题解决方案
一、匹配1-3个下划线分隔连续数字的正则语法
要匹配1个、2个或3个由下划线分隔的连续数字,可使用:(_\d){1,3}
- 细节说明:
_:匹配下划线本身\d:匹配任意单个数字(和[0-9]等价){1,3}:指定前面的(_\d)结构可重复1到3次
结合你的文件名场景,完整匹配RESPONDENT后接1-3组下划线数字的片段为:RESPONDENT(_\d){1,3}
二、匹配结果为0的原因及解决办法
问题根源
你原正则.*RESPONDENT_[0-9].*.csv.gz里的开头.*是匹配任意长度的任意字符(包括空内容),所以能覆盖两种文件名:
- 以
RESPONDENT直接开头的文件(如RESPONDENT_0_0_0.csv.gz) - 开头带有其他前缀(如
PROJECT_SLICE_)的文件(如PROJECT_SLICE_RESPONDENT_0_0_0.csv.gz)
当移除开头的.*后,正则要求字符串必须以RESPONDENT开头,但PROJECT_SLICE_RESPONDENT_...这类文件的开头是PROJECT_SLICE_,不符合开头匹配规则,因此匹配结果为0。
优化后的正则写法
如果要匹配所有4个目标文件,保留开头的.*即可,同时可以优化正则让匹配更精准:
.*RESPONDENT(_\d){1,3}\.csv\.gz
- 优化点:
- 用
(_\d){1,3}替代_[0-9].*,精准限定下划线数字的组数为1-3组 - 对
.csv.gz里的.转义为\.,避免.匹配任意字符的问题(比如不会错误匹配csvXgz这类不符合格式的字符串)
- 用
如果只想匹配以RESPONDENT开头的文件,去掉开头的.*即可:
RESPONDENT(_\d){1,3}\.csv\.gz
内容的提问来源于stack exchange,提问作者Ayush L
相关产品推荐
相关产品推荐

