正则表达式和相对文件路径
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"。
【讨论】:
以上是关于正则表达式和相对文件路径的主要内容,如果未能解决你的问题,请参考以下文章