0

複数のネットワークパスの場所を含む文字列があります。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つの結果(最初のパス)しか得られないということです。一致数は1です。問題はどこにありますか。

4

2 に答える 2

1

この正規表現で分割できます

\s*(?=\\)

だから、それは次のようになります

Regex.Split(input,yourRegex);
于 2013-03-12T08:11:11.670 に答える
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

@" (?=\\\\)"は、2つの円記号が後に続く場合にのみスペースに一致する正規表現です。ポジティブな先読みアサーション(?=\\\\)です

于 2013-03-12T08:17:50.043 に答える