Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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_Path - Fatal编程技术网

C# 包含多个网络路径的拆分字符串

C# 包含多个网络路径的拆分字符串,c#,regex,path,C#,Regex,Path,我有一个包含多个网络路径位置的字符串。它可以是2、3或任何数字。我想分成若干条路径。我正在使用正则表达式,但没有得到期望的结果 string samplePath = "\\Computer1\Folder\Folder \\Computer2\Folder\New Folder \\Computer\New Folder" 我不能通过将空格用作delim字符来拆分它,因为文件夹名称中可以包含空格。 下面是我用来获得所需结果的正则表达式 var pattern = @"^\\{2}[\w-]+

我有一个包含多个网络路径位置的字符串。它可以是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。问题在哪里。

您可以使用此正则表达式拆分它

\s*(?=\\)

所以,这就像

Regex.Split(input,yourRegex);

使用
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

@“(?=\\\)”
是一个正则表达式,只有在空格后面紧跟两个反斜杠时才匹配它
(?=\\\)
是一个

为什么要使用正则表达式?为什么不按空间分割呢?还是用“\\”来解释这件事?它在运行时也会更快。请注意,路径中的多个反斜杠是有效的:C:\path1\\path2\\\filename.txt相当于C:\path1\path2\filename.txt。当错误地连接路径时,可能会发生这种情况。