C# 包含多个网络路径的拆分字符串
我有一个包含多个网络路径位置的字符串。它可以是2、3或任何数字。我想分成若干条路径。我正在使用正则表达式,但没有得到期望的结果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-]+
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。当错误地连接路径时,可能会发生这种情况。