Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式和相对文件路径_C#_Regex - Fatal编程技术网

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

C# 正则表达式和相对文件路径,c#,regex,C#,Regex,我正在尝试使用C#匹配相对路径中的文件夹名称。我正在使用表达式:“/(.*)?/”,并从左到右到右到左反转匹配。 当我将“images/gringo/”传递到正则表达式中时,它正确地给出了第一组中的“gringo”——我只对括号之间的内容感兴趣。 当我传入“images/”时,它无法拾取“images”。 我试过使用[/^]和[/$]但都不起作用 谢谢, David您最好使用类来解释您的相对路径。然后,您可以使用其成员选择文件夹或文件名: DirectoryInfo di = new Direc

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

谢谢,
David

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

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

这将比您可以使用的任何regexp安全得多。

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

那么:

"([^/]+)/?$"
  • 1个或多个非/字符
  • 可选的/
  • 结束
但是,正如所说的,最好使用一个为您封装此内容的类….

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

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

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