微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# – 文件path的正则expression式,例如C:\ test \ test.exe

我目前正在寻找一个正则expression式,可以帮助validation文件path例如:

C:testtest2test.exe

Windows资源pipe理器在应用程序调用Web服务时不响应

等待networkingconfiguration在Windows服务启动完成

Windows Update API c#:设置下载位置

如何检测Windows 8操作系统使用C#4.0?

调用“运行”命令

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

^(?:[a-zA-Z]:|\\[w.]+\[w.$]+)\(?:[w]+\)*w([w.])+$

适用于这些:

\testtest$TEST.xls \serversharefoldermyfile.txt \serversharemyfile.txt \123.123.123.123sharefoldermyfile.txt c:foldermyfile.txt c:foldermyfileWithoutExtension

编辑:添加示例用法

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

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

如果你的目标是处理文件名,我会推荐使用Path类而不是Regex。

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

提议的不是很好,这是我为XSD构建的,它是Windows特有的:

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

试试这个用于Windows和Linux的支持: ((?:[a-zA-Z]:){0,1}(?:[\/][w.]+){1,})

我使用这个正则表达式在windows(包括UNC和%变量%)中捕获有效的文件/文件夹路径,排除根路径如“C:”或“\ serverName”

^(([a-zA-Z]:|\\w[ w.]*)(\w[ w.]*|\%[ w.]+%+)+|%[ w.]+%(\w[ w.]*|\%[ w.]+%+)*)

这个正则表达式不匹配路径元素中的前导空格,所以

“C: program files”被匹配

“C: pathWithLeadingSpace”不匹配

变量在任何级别都是允许的

“%program files%”被匹配

“C:我的路径与内部空间%我var与内部空间%”匹配

regex CmdPrompt("^([AZ]:[^<>:"|?*]+>)");

基本上,我们查找不在禁止的Windows路径字符列表中的所有内容

< (less than) > (greater than) : (colon) " (double quote) | (vertical bar or pipe) ? (question mark) * (asterisk)

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

(^([az]|[AZ]):(?=\(?![-37<>:"/\|?*])|/(?![-37<>:"/\|?*])|$)|^\(?=[\/][^-37<>:"/\|?*]+)|^(?=(\|/)$)|^.(?=(\|/)$)|^..(?=(\|/)$)|^(?=(\|/)[^-37<>:"/\|?*]+)|^.(?=(\|/)[^-37<>:"/\|?*]+)|^..(?=(\|/)[^-37<>:"/\|?*]+))((\|/)[^-37<>:"/\|?*]+|(\|/)$)*()$

这是为UNIX / Linux路径

^/$|(^(?=/)|^.|^..)(/(?=[^/])[^/]+)*/?$

这是我的测试:

Win Regex

Unix正则表达式

这些使用Javascript

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

我发现这里的大部分答案都是一个小小的失误。

在这里找到一个很好的解决方

https://social.msdn.microsoft.com/forums/vstudio/en-US/31d2bc84-c948-4914-8a9d-97b9e788b341/validate-a-network-folder-path

注意* – 这只适用于网络共享 – 不是本地文件

回答:

string pattern = @"^\{2}[w-]+(\{1}(([w-][w-s]*[w-]+[$$]?)|([w-][$$]?$)))+"; string[] names = { @"\my-networksomelocation",@"\my-network\somelocation",@"\my-networksomelocation",@"my-networksomelocation",@"\my-networksomelocationaadd",@"\my-network\somelocation"}; foreach (string name in names) { if (Regex.IsMatch(name,pattern)) { Console.WriteLine(name); //Directory.Exists function to check if file exists } }

亚历山大的答案+相对路径

亚历山大迄今为止的答案是最正确的,因为它支持文件名中的空格(即C:Program Files (x86)将匹配)…这也包括相对路径。

例如,您可以执行cd /或cd 并执行相同的操作。

此外,如果您目前在C:somepathtosomeplace并且键入了其中的任何一个命令,则最终会在C:

更重要的是,你应该考虑以'/'开头的路径作为根路径(到当前驱动器)。

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

然而,亚历山大的答案的修改版本,我们包括相对路径,没有领先/或驱动器号,以及/没有前导驱动器号(相对于当前驱动器作为根)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐