C# - 文件路径的正则表达式,例如C:\ test\test.exe

Dan*_*Dan 21 .net c# regex windows

我目前正在寻找可以帮助验证文件路径的正则表达式,例如:

C:\test\test2\test.exe
Run Code Online (Sandbox Code Playgroud)

age*_*t-j 31

我决定发布这个使用正则表达式的答案.

^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$
Run Code Online (Sandbox Code Playgroud)

适用于这些:

\\test\test$\TEST.xls
\\server\share\folder\myfile.txt
\\server\share\myfile.txt
\\123.123.123.123\share\folder\myfile.txt
c:\folder\myfile.txt
c:\folder\myfileWithoutExtension
Run Code Online (Sandbox Code Playgroud)

编辑:添加了示例用法:

if (Regex.IsMatch (text, @"^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$"))
{
  // Valid
}
Run Code Online (Sandbox Code Playgroud)

*编辑:*这是您可以看到的路径的近似值.如果可能,最好使用Path类或FileInfo类来查看文件或文件夹是否存在.

  • 如果你的路径/文件名包含空格,你的正则表达式将不起作用:`Regex.IsMatch(@"c:\ your folder\sub folder\your file.txt",@"^(?:[a-zA-Z] \:| \\\\ [\ W \.] + \\ [\ W $] +)\\(?:[\ w] + \\)*\W([\ W])+ $" )` (8认同)
  • @担.写给我自己的启发.有趣! (4认同)

Ree*_*sey 24

如果您的目标是使用文件名,我建议使用Path类而不是Regex.

例如,您可以调用Path.GetFullPath来"验证"路径,因为ArgumentException如果路径包含无效字符,它将引发一个路径,如果路径太长则会引发其他例外情况,等等.这将处理所有规则,使用正则表达式很难得到正确的结果.


mon*_*dev 10

这是Windows路径的正则表达式:

(^([a-z]|[A-Z]):(?=\\(?![\0-\37<>:"/\\|?*])|\/(?![\0-\37<>:"/\\|?*])|$)|^\\(?=[\\\/][^\0-\37<>:"/\\|?*]+)|^(?=(\\|\/)$)|^\.(?=(\\|\/)$)|^\.\.(?=(\\|\/)$)|^(?=(\\|\/)[^\0-\37<>:"/\\|?*]+)|^\.(?=(\\|\/)[^\0-\37<>:"/\\|?*]+)|^\.\.(?=(\\|\/)[^\0-\37<>:"/\\|?*]+))((\\|\/)[^\0-\37<>:"/\\|?*]+|(\\|\/)$)*()$
Run Code Online (Sandbox Code Playgroud)

这适用于UNIX/Linux路径

^\/$|(^(?=\/)|^\.|^\.\.)(\/(?=[^/\0])[^/\0]+)*\/?$
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

赢得正则表达式

Unix正则表达式

这些与Javascript一起使用

编辑 我添加了相对路径,(.. /,./,../something)

编辑2 我添加了以tilde为开头的路径,用于unix,(〜/,〜,〜/ something)

  • 您还可以编辑〜/之类的路径吗? (2认同)

Ale*_*der 7

建议的一个不是很好,这是我为XSD构建的,它是Windows特定的:

^(?:[a-zA-Z]\:(\\|\/)|file\:\/\/|\\\\|\.(\/|\\))([^\\\/\:\*\?\<\>\"\|]+(\\|\/){0,1})+$
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试以下一项以获得Windows和Linux支持: ((?:[a-zA-Z]\:){0,1}(?:[\\/][\w.]+){1,})


Fed*_*nis 5

我使用此正则表达式来捕获 Windows 中的有效文件/文件夹路径(包括 UNC 和 %variables%),但不包括“C:\”或“\\serverName”等根路径

^(([a-zA-Z]:|\\\\\w[ \w\.]*)(\\\w[ \w\.]*|\\%[ \w\.]+%+)+|%[ \w\.]+%(\\\w[ \w\.]*|\\%[ \w\.]+%+)*)
Run Code Online (Sandbox Code Playgroud)

此正则表达式与路径元素中的前导空格不匹配,因此

  • "C:\program files" 匹配
  • "C:\pathWithLeadingSpace" 不匹配

任何级别都允许变量

  • "%program files%" 匹配
  • "C:\my path with internal space\%my var with internal space%" 匹配

  • 亲戚路径呢? (2认同)