正则匹配文件名含指定字符串且排除特定字符串的方案求助
解决方案
可以使用以下正则表达式精准匹配符合要求的文件路径:
^.*\\(?=[^\\]*MVP)(?!.*Missing)[^\\]*\.(csv|xlsx?|txt)$
正则拆解
^.*\\:匹配路径中最后一个反斜杠之前的所有内容,确保后续匹配的是纯文件名部分(?=[^\\]*MVP):正向预查,验证文件名中包含MVP([^\\]*确保只在文件名范围内查找,不会匹配路径中的MVP)(?!.*Missing):负向预查,验证文件名中不包含Missing[^\\]*:匹配文件名剩余的任意非路径分隔符字符\.(csv|xlsx?|txt)$:匹配指定的文件后缀(xlsx?同时覆盖.xls和.xlsx),并确保是路径结尾
示例验证
针对你给出的三个路径:
\\p8files\MVP\Inbound\2023\202310\20231016\BillingProvEntityFix1016.xlsx:文件名无MVP,不匹配\\p8files\MVP\Inbound\2023\202310\20231016\BillingProv_MVP_EntityFix1016.xlsx:文件名含MVP且无Missing,匹配\\p8files\MVP\Inbound\2023\202310\20231016\BillingProv_MVP_Entity_MissingFix1016.xlsx:文件名含Missing,不匹配
之前尝试的问题分析
- 第一个正则
^.*(?=^.*MVP)(?!^.*Missing).*(\.csv|\.xls|\.xlsx|\.txt)$:断言是针对整个路径的,所以路径中的MVP会被误判为符合条件,没有限制只检查文件名 - 第二个正则
\b.*MVP[^\\]*(\.csv|\.xls|\.xlsx|\.txt)$:缺少排除Missing的负向预查逻辑,且\b的边界匹配可能在路径中触发,无法精准锁定文件名区域
内容的提问来源于stack exchange,提问作者Mmb423
相关产品推荐
相关产品推荐

