2013-03-12 39 views
0

我有一个包含多个网络路径位置的字符串。它可能是2,3或任何数字。我想分解成多个路径。我使用正则表达式,但我没有得到期望的结果。包含多个网络路径的拆分字符串

string samplePath = "\\Computer1\Folder\Folder \\Computer2\Folder\New Folder \\Computer\New Folder" 

我不能使用空格作为DELIM字符作为文件夹名称可以包含空格的分裂这一点。 这里是我正在使用的正则表达式来获得我想要的结果。

var pattern = @"^\\{2}[\w-]+(\\{1}(([\w-][\w-\s]*[\w-]+[$$]?)|([\w-][$$]?$)))+"; 
var matches = Regex.Matches(samplePath, pattern, RegexOptions.IgnoreCase); 
foreach (var match in matches) 
    myCollectionList.Add(match.ToString()); 

之后会发生什么,我得到只有一个结果(第一路径)。匹配数是1.问题在哪里。

+0

为什么要使用正则表达式?为什么不按空间分割?或者通过“\\”来解决这个问题?它在运行时也会更快。 – 2013-03-12 08:20:47

+0

请注意,多个反斜杠在路径中有效:C:\ path1 \\ path2 \\\ filename.txt等同于c:\ path1 \ path2 \ filename.txt。当错误地连接路径时会发生这种情况。 – Jonathan 2013-03-12 08:23:21

回答

1

使用Regex.Split

string source = @"\\Computer1\Folder\Folder \\Computer2\Folder\New Folder \\Computer\New Folder"; 

string[] result = Regex.Split(source, @" (?=\\\\)"); 

    foreach (string a in result) { 
    Console.WriteLine(a); 
} 

氏旨意打印

\\Computer1\Folder\Folder 
\\Computer2\Folder\New Folder 
\\Computer\New Folder 

@" (?=\\\\)"是一个正则表达式,只有当它后面是两个反斜线将匹配的空间。 (?=\\\\)positive lookahead assertion

+0

如果第一个路径中没有空间,它会工作吗? – 2013-03-12 09:00:54

1

可以拆分它与这个表达式

\s*(?=\\) 

因此,它会像

Regex.Split(input,yourRegex); 
相关问题