^(?:(?:[a-zA-Z]:|\.{1,2})?[\\/](?:[^\\?/*|<>:"]+[\\/])*)(?:(?:[^\\?/*|<>:"]+?)(?:\.[^.\\?/*|<>:"]+)?)?$
图片为菜鸟正则表达式可视化工具网页截图
D:\Workspace\sample.txt
D:/Workspace/
D:\
/Workspace/sample.txt
/Workspace
注意无法匹配
D:
请使用D:\
.\Res\map\sample.bin
..\Res\map\
正则表达式本身在解析时会对反斜线做一次转义处理,这一次转义是独立于编程语言对反斜线的转义处理的,所以不能直接复制粘贴到代码里,需要做一些处理,简单理解就是正则表达式中每出现一个斜线,代码中就写两个,或者使用编程语言提供的原始字符串功能也可以。下面是一些使用案例:
// C++
// 额外转义
std::regex pattern("^(?:(?:[a-zA-Z]:|\\.{1,2})?[\\\\/](?:[^\\\\?/*|<>:\"]+[\\\\/])*)(?:(?:[^\\\\?/*|<>:\"]+?)(?:\\.[^.\\\\?/*|<>:\"]+)?)?$");
// 原始字符串
std::regex pattern(R"(^(?:(?:[a-zA-Z]:|\.{1,2})?[\\/](?:[^\\?/*|<>:"]+[\\/])*)(?:(?:[^\\?/*|<>:"]+?)(?:\.[^.\\?/*|<>:"]+)?)?$)");
# Python 原始字符串
pattern = r'^(?:(?:[a-zA-Z]:|\.{1,2})?[\\/](?:[^\\?/*|<>:"]+[\\/])*)(?:(?:[^\\?/*|<>:"]+?)(?:\.[^.\\?/*|<>:"]+)?)?$'