如何使用Regex匹配含可变内容的固定格式文件名?
匹配含固定片段的文件名正则解决方案
你之前用的DON_*_JOE_*.txt是shell通配符的写法,不是正则表达式语法,所以没法正常工作——正则里的*是量词,用来表示前面的字符重复零次或多次,不是"任意内容"的通配符。
给你几个适配需求的正则方案:
1. 基础通用版(匹配任意内容)
如果可变部分允许任何字符(包括下划线、符号等),用这个:
^DON_.*_JOE_.*\.txt$
关键细节:
^和$分别锁定文件名的开头和结尾,避免匹配到类似X_DON_123_JOE_456.txt_Y的无效文件名.*才是正则里匹配"任意数量非换行字符"的写法,对应你要的"任意内容"\.txt里的\是转义符——正则中.默认匹配任意字符,必须转义才能匹配实际的点号
2. 限制可变部分为数字/字母版
如果要求中间可变内容只能是数字或大小写字母,把.*换成字符集匹配:
^DON_[A-Za-z0-9]*_JOE_[A-Za-z0-9]*\.txt$
说明:
[A-Za-z0-9]定义了允许的字符范围,*表示可以出现零次或多次
3. 避免可变部分含下划线版
如果不想让中间的可变内容包含下划线(防止误匹配多段下划线的文件名),用[^_]*匹配非下划线内容:
^DON_[^_]*_JOE_[^_]*\.txt$
说明:
[^_]表示"除了下划线之外的任意字符",确保DON_和_JOE_之间只有一段内容
内容的提问来源于stack exchange,提问作者Kevin John
相关产品推荐
相关产品推荐

