提取没有文件名C#的路径

时间:2015-06-07 15:19:52

标签: c# .net regex

我正是下面的字符串。使用Regex如何只提取路径?

"C:\Python34\py.exe" "%1" %*

我已经尝试过这些模式失败:

  

([a-zA-Z] :[\ [a-zA-Z0-9。] ] *)

它给了我整条路径C:\Python34\py.exe

  

^ [^ \ t] + [\ t] +(。*)$

它给了我整个字符串"C:\Python34\py.exe" "%1" %*

修改

我知道System.IO命名空间中的选项。但是有一个字符串即将到来,我需要从中提取路径 - > "C:\Python34\py.exe" "%1" %* 正如我所示,包含路径的字符串可能不规则。

4 个答案:

答案 0 :(得分:4)

您应该使用System.IO.Path类中提供的静态方法,而不是使用Regex。

如果你想要没有文件名的路径,你可以这样做:

string myFullPath = @"C:\Python34\py.exe";
string pathOnly = Path.GetDirectoryName(myFullPath);
//pathOnly will be "C:\Python34"

编辑:由于您将在路径之后获得参数,我们可以先得到第一个引用的子字符串:

Regex quotedPattern = new Regex("([\"'])(?:(?=(\\?))\2.)*?\1");
Match matches = quotedPattern.Match(myFullPath);
if(matches.Groups.Count > 0)
{
     pathOnly = matches.Captures[0].Value;
     pathOnly = Path.GetDirectoryName(pathOnly);
}

正则表达式测试:RegexStorm

答案 1 :(得分:1)

在您的情况下直接在输入上使用<ul>,抛出异常。您可以使用<!-- here is the part i try to call with another drawer independent of the first, he have to appear when user click on <a> link 2 --> <div class="drawer2-main drawer2-default"> <nav class=" drawer2-nav" role="navigation" style="transition-timing-function: cubic-bezier(0.1, 0.57, 0.1, 1); -webkit-transition-timing-function: cubic-bezier(0.1, 0.57, 0.1, 1); transition-duration: 0ms; -webkit-transition-duration: 0ms; transform: translate(0px, 0px) translateZ(0px);"> <ul class="drawer2-menu"> <li class="drawer2-menu-item"> <ul class="drawer2-submenu"> <li class="drawer2-submenu-item"> <a href="">Work</a> </li> <li class="drawer2-submenu-item"> <a href="">House</a> </li> </ul> </li> </ul> ulchar name[40]; 的组合来尝试此非正则表达式方法:

scanf("%s",name);

答案 2 :(得分:0)

另一种选择是使用Path.GetDirectoryName和简单的Substring

string value = "\"C:\\Python34\\py.exe\" \"%1\" %*";
string path = Path.GetDirectoryName(value.Substring(1, value.IndexOf("\"", 2)-1));

see fiddle here

答案 3 :(得分:0)

我想你可以将它概括为足以区分它 来自其他引用的值。

这需要在引用的字符串中至少有\file.ext

 "
 # @"""([^""]*)\\([^""\\]+(?:\.[^"".\\]+))"""

 (                    # (1 start), Path
      [^"]* 
 )                    # (1 end)
 \\ 
 (                    # (2 start), File name
      [^"\\]+ 
      (?:
           \.
           [^".\\]+ 
      )
 )                    # (2 end)
 "

输出:

 **  Grp 0 -  ( pos 0 , len 22 ) 
"C:\Python34\py.exe.d"  
 **  Grp 1 -  ( pos 1 , len 11 ) 
C:\Python34  
 **  Grp 2 -  ( pos 13 , len 8 ) 
py.exe.d