【问题标题】:Split string containing multiple network paths包含多个网络路径的拆分字符串
【发布时间】:2013-03-12 08:06:01
【问题描述】:

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

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

我不能通过使用空格作为分隔符来拆分它,因为文件夹名称中可以包含空格。 这是我用来获得所需结果的正则表达式。

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。问题出在哪里。

【问题讨论】:

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

标签: c# regex path


【解决方案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

【讨论】:

    【解决方案2】:

    你可以用这个正则表达式拆分

    \s*(?=\\)
    

    原来是这样的

    Regex.Split(input,yourRegex);
    

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2021-04-05
      • 2015-02-15
      相关资源
      最近更新 更多