如何通过正则表达式过滤文件路径,排除文件名含特定字符串的XML文件
需求实现说明
该需求完全可以通过正则表达式实现,无需依赖额外的代码逻辑,仅需在原有规则基础上叠加分支判断与负向匹配逻辑即可。
原有正则的问题修正
你当前使用的/.xml$|.json$/i存在两个疏漏:
- 后缀前的
.未转义,会误匹配类似1xml、xjson这类非目标后缀的字符串 - 未实现新增的xml文件排除规则
匹配逻辑拆分
按照要求,规则拆分为两个互不干扰的分支:
- 所有后缀为
.json的文件,无论是否包含_unwanted_string特征串,均正常匹配 - 所有后缀为
.xml的文件,仅当文件名/路径中不包含_unwanted_string特征串时,才予以匹配
最终可用正则表达式
/^(?!.*_unwanted_string).*\.xml$|^.*\.json$/i
规则细节说明
- 保留原有
i修饰符,维持大小写不敏感的匹配特性 (?!.*_unwanted_string)为负向先行断言,仅作用于前半段的.xml匹配分支,不会影响json后缀的匹配规则\.为转义后的点,仅匹配真实的后缀分隔符,避免误匹配任意字符导致的规则失效
匹配效果验证
- 符合排除规则的文件(不会被匹配):
file_name_unwanted_string.xml、SOMEOTHERNAME_unwanted_string.xml、NAME3_unwanted_string_MORE_TEXT.xml - 符合匹配规则的文件(会被捕获):
normal_file.xml、any_name_unwanted_string.json、test123.json
注意事项
如果你的匹配场景是针对带路径的完整文件路径做过滤,且要求仅文件名部分出现_unwanted_string才排除,可将负向断言调整为(?!.*/.*_unwanted_string),避免路径中出现该特征串导致的误排除。
内容的提问来源于stack exchange,提问作者Valu3
相关产品推荐
相关产品推荐

