2013-03-29 36 views
0

我想要目录路径中的子字符串。 有没有任何查询或正则表达式来做到这一点。 我有路径是这样的:从路径目录中获取子字符串

E:\\Work\\Taxonomies\\012\\20110826\\20110826_final\\full_entry_point_2011-08-26.xsd 

我想是

20110826_final\\full_entry_point_2011-08-26.xsd 

我想从路径中的倒数第二个“\”我可以在阵列分割,但后来我不得不结合最后两个值。

string[] path = value.Split('\\'); 
int length=path.Length; 
if(length>1) 
{ 
string final = string.Concat(path[length-2],"\\", path[length-1]); 
} 

请指导我。有没有其他的方式来实现它。

+0

'value.Substring(32)'不适合你吗? – Tomalak

+0

我不认为他有固定的长度。 – Loamhoof

+0

@Loamhoof'Substring()'从字符串的开始处移除,而不是从结尾开始。 – Tomalak

回答

2
String pattern = @"(.*\\)(.*\\.*$)"; 
String input = @"E:\Work\Taxonomies\012\20110826\20110826_final\full_entry_point_2011-08-26.xsd"; 
String result = Regex.Match(input, pattern).Groups[2].Value; 

编辑

此正则表达式中两组分的字符串。 首先 - 所有的符号和\它可以在第二组之前。 二 - 所有剩余的符号其是“文本” \“text''endofstring”

+0

@德米特里Dovgopoly ..Bingo.I得到了解决办法。谢谢很多先生。其工作:) –

+0

有一件事。当文件不在像E:\ 1.txt这样的文件夹中时,它表现不好。在这种情况下你期望什么? –

+0

它处理你刚才提到的场景..请解释正则表达式的意义,如果可能的话,我可以在将来实现我的.. –

0

由于我不知道C#中,你将可能有以“\”数量的交易,但是,如果你想用正则表达式来做到这一点:

/(?<=\\\\)[^\\]+\\\\[^\\]+$/ 

即“一个或更多的字符前面是2个反斜杠,然后是2个反斜杠,然后是一个或多个字符,直到结尾“。当我指人物时,我的意思是一切,但是反斜杠。

+0

这个结果类似于通过“\\”分割值后得到的数组集合。 –

+0

感谢您的努力:)我想知道是否有其他方式比我提到的更好。 –

+0

正如我所说,我不知道C#,但发现它不会简单地返回一个字符串有点奇怪,因为在这个正则表达式中没有组,并且只有一个匹配成为可能,我看不到它会返回什么相反: – Loamhoof

0

的另一种方法使用正则表达式此搜索操作是使用LastIndexOf方法String类这样的:

static bool TryFindTrailingPart(string path, int numberOfSeparators, out string result) 
    { 
     var sep = Path.DirectorySeparatorChar; 
     var lastSlash = path.Length; 
     for(int i = 0; i < numberOfSeparators; i++) 
     { 
      lastSlash = path.LastIndexOf(sep, lastSlash - 1); 
      if(lastSlash < 0) 
      { 
       result = null; 
       return false; 
      } 
     } 

     result = path.Substring(lastSlash + 1); 
     return true; 
    } 

虽然这段代码比正则表达式长得多,但它确实有一些优点:它比正则表达式方法更灵活(对参数化的路径分隔符的数目进行搜索),并且执行速度更快。

用OP的路径表达式在紧密循环中运行上面的代码需要大约200毫秒的10000次迭代。

使用Dmitry Dovgopoly在相同迭代次数下给出的正则表达式方法需要大约6890毫秒。将Dmitry的代码转换为使用编译的正则表达式(并且不包括编译表达式所需的时间)仍然需要大约3140毫秒。

这种方法的速度和灵活性是否超过源代码长度的增加很大程度上取决于您的具体情况:如果您正在处理(非常!)大量路径字符串,它可能会有用。另一方面,如果你只需要一段代码来处理路径字符串处理问题,则正则表达式方法可能更合适。

相关问题