正则表达式和相对文件路径

Posted

技术标签:

【中文标题】正则表达式和相对文件路径【英文标题】:Regular Expressions and Relative File Paths 【发布时间】:2010-09-19 18:52:33 【问题描述】:

我正在尝试使用 C# 匹配相对路径中的文件夹名称。我正在使用表达式:"/(.*)?/" 并将匹配从左到右反转到从右到左。 当我将"images/gringo/" 传递给正则表达式时,它在第一组中正确地给了我"gringo" - 我只对括号之间的内容感兴趣。 当我传入"images/" 时,它无法接听"images"。 我尝试过使用[/^][/$],但都不起作用。

谢谢, 大卫

【问题讨论】:

正则表达式并不总是答案!在这种情况下,工具提供的库要容易得多! :) 【参考方案1】:

您最好使用System.IO.DirectoryInfo 类来解释您的相对路径。然后,您可以使用其成员选择文件夹或文件名:

DirectoryInfo di = new DirectoryInfo("images/gringo/");
Console.Out.WriteLine(di.Name);

这将比您可以使用的任何正则表达式安全得多。

【讨论】:

【参考方案2】:

不要这样做。使用 System.IO.Path 分解路径部分,然后比较它们。

【讨论】:

【参考方案3】:

怎么样:

"([^/]+)/?$"
1 个或多个非 / 字符 可选/ 字符串结束

但正如@Blair Conrad 所说 - 最好使用一个为您封装它的类......

【讨论】:

【参考方案4】:

同意“不要这样做”的答案,但是,因为它被标记为“regex”......

您不需要?* 已经接受 0 次重复作为匹配,所以 (.*) 完全等同于 (.*)? 无论如何,您很少真正想要使用.*。如果您尝试捕获一对斜线之间的内容,请使用 /([^/]*)/ 否则针对“foo/bar/baz/”的测试将(在大多数正则表达式实现中)返回一个匹配“ bar/baz" 而不是分别匹配 "bar" 和 "baz"。

【讨论】:

以上是关于正则表达式和相对文件路径的主要内容,如果未能解决你的问题,请参考以下文章

用于提取部分文件路径的正则表达式

正则表达式返回文件名,删除路径和文件扩展名

std::regexC++文件路径正则表达式

在 C# 中使用正则表达式从完整路径解析文件名

文件操作,路径操作,StringIO和BytesIO,序列化反序列化,正则表达式与python中使用

c# 中用于文件夹路径验证(远程路径、FTP 路径、本地系统文件夹路径等)的单个正则表达式 [关闭]