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

时间:2008-10-29 12:47:27

标签: c# regex

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

谢谢, 大卫

4 个答案:

答案 0 :(得分:13)

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

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

这比你可以使用的任何正则表达式都要安全得多。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

怎么样:

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

但是正如@Blair Conrad所说的那样 - 最好选择一个为你封装这个的类....

答案 3 :(得分:1)

同意“不要这样做”答案,但是,因为它被标记为“正则表达式”......

  • 您不需要 * 已经接受0次重复作为匹配,因此(。*)完全等同于(。*)?
  • 你很少真的想要使用 *无论如何。如果你试图捕捉一对斜杠之间的内容,请使用 /([^ /] *)/ ,否则将对“foo / bar / baz /”进行测试(在大多数正则表达式实现中)返回“bar / baz”的单个匹配,而不是单独匹配“bar”和“baz”。