正则表达式匹配限定根目录的单级子文件夹路径求助
解决方案
直接使用以下正则表达式即可精准匹配你需要的两种合法路径:
^(?:\.\/)?apidocs\/static\/[^\/]+\.(?:png|jpg|jpeg|gif|pdf)$
正则规则说明
^:锚定字符串开头,确保路径前不会出现其他额外目录(?:\.\/)?:可选匹配根目录下的./前缀,?:表示这是非捕获分组,不会占用匹配结果的分组存储位置apidocs\/static\/:固定匹配目标路径的起始部分,确保是根目录下的apidocs文件夹[^\/]+:匹配文件名,[^\/]限制不能包含斜杠,避免误匹配apidocs子目录里的文件\.(?:png|jpg|jpeg|gif|pdf):匹配指定格式的文件扩展名,同样用非捕获分组简化逻辑$:锚定字符串结尾,确保路径后没有多余内容
匹配效果验证
- 合法路径:
./apidocs/static/mypicture.jpg→ 匹配成功apidocs/static/mypicture.jpg→ 匹配成功
- 非预期路径:
./traapidocs/static/mypicture.jpg→ 不匹配(开头的traapidocs与apidocs不匹配)./whatever/apidocs/static/mypicture.jpg→ 不匹配(前缀多了whatever/目录,被^锚定拦截)
Python脚本使用示例
可以用re.fullmatch()直接验证整个字符串是否符合规则:
import re pattern = r'^(?:\.\/)?apidocs\/static\/[^\/]+\.(?:png|jpg|jpeg|gif|pdf)$' test_paths = [ "./apidocs/static/mypicture.jpg", "apidocs/static/mypicture.jpg", "./traapidocs/static/mypicture.jpg", "./whatever/apidocs/static/mypicture.jpg" ] for path in test_paths: if re.fullmatch(pattern, path): print(f"✅ 匹配: {path}") else: print(f"❌ 不匹配: {path}")
你之前加^未生效,大概率是没处理./的可选情况,或者没加$导致字符串后半部分有内容也能被部分匹配。这个正则同时锚定了开头和结尾,还兼容两种根目录写法,刚好满足你的需求。
内容的提问来源于stack exchange,提问作者kimper
相关产品推荐
相关产品推荐

