RegEx匹配文件路径:命中文件夹返回对应路径、命中文件返回全路径
正则匹配Windows文件路径解决方案
可用正则
^.*?(?:John|Smith|Junior)[^\\]*?(?:\\|$)
规则说明
^锚定当前行开头,避免跨行匹配.*?惰性匹配路径前缀,直到遇到第一个指定关键词(?:John|Smith|Junior)非捕获组匹配目标关键词,不占用额外分组内存[^\\]*?惰性匹配当前命中段的剩余字符,直到遇到路径分隔符反斜杠或者行尾(?:\\|$)匹配路径分隔符(说明命中内容为文件夹,截止到当前文件夹层级即可)或行尾(说明命中内容为文件名,取整行完整路径)
匹配效果验证
输入行:C:\temp\John Smith Junior\file.pdf 匹配结果:C:\temp\John Smith Junior\ 输入行:C:\temp\John Smith Junior\John Smith Junior\file.pdf 匹配结果:C:\temp\John Smith Junior\ 输入行:C:\temp\John Smith Junior file.pdf 匹配结果:C:\temp\John Smith Junior file.pdf
原正则问题说明
你之前使用的.*([^\\]*(John|Smith|Junior)){2}.*存在两个问题:
- 开头和结尾的贪婪匹配
.*会直接覆盖整行内容 - 要求关键词组匹配2次的规则不符合“命中第一个关键词就截止”的需求,导致匹配范围过长。
内容的提问来源于stack exchange,提问作者Anton R
相关产品推荐
相关产品推荐

