2017-03-22 3 views
0

ドライブパスか "pol"パスかを確認したいと思います。 私はすでに小さなコードを書いていますが、残念ながら私はいつも真実を返します。ドライブパスなのでしょうか? Regexで確認する

正規表現が正しくない可能性があります\W?\w{1}:{1}[/]{1}。パス名は常に異なっていて、ポールパスに同意する必要はありません。 ありがとうございます。


public bool isPolPath(string path) 
{ 
    bool isPolPath= true; 
    // Pol-Path:  /Buy/Toy/Special/Clue 
    // drive-Path:  Q:\Buy/Special/Clue 

    Regex myRegex = new Regex(@"\W?\w{1}:{1}[/]{1}", RegexOptions.IgnoreCase); 
    Match matchSuccess = myRegex.Match(path); 
    if (matchSuccess.Success) 
     isPolPath= false; 

    return isPolPath; 
} 
+0

のどちらかだろうPOLまたはドライブパスを区別するためのルールは何ですか? 'return path.StartsWith("/");' – ASh

+1

質問をより明確にするために、一連のテストケースを提供してください。 –

答えて

1

あなたはこれを達成するために正規表現を必要としません。 System.IO.Path.GetPathRootを使用してください。指定されたパスにドライブ文字と空の文字列またはスラッシュが含まれている場合は、X:\Xは実際のドライブ文字)を返します。

new List<string> { 
    @"/Buy/Toy/Special/Clue", 
    @"q:\Buy/Special/Clue", 
    @"Buy", 
    @"/", 
    @"\", 
    @"q:", 
    @"q:/", 
    @"q:\", 
    //@"", // This throws an exception saying path is illegal 
}.ForEach(
    p => Console.WriteLine(Path.GetPathRoot(p)) 
); 

/* This code outputs: 
    \ 
    q:\ 

    \ 
    \ 
    q: 
    q:\ 
    q:\ 
*/ 

したがって、あなたのチェックは次のようになります。

isPolPath = Path.GetPathRoot(path).Length < 2; 

、あなたのコードをより確実な作りと、空の文字列が渡されたときに例外から保護したい場合は、空かどうかを判断する必要があります(またはnull)stringは、ポールパスまたはドライブパスです。判決によるチェックが

sPolPath = string.IsNullOrEmpty(path) || Path.GetPathRoot(path).Length < 2; 

または

if (string.IsNullOrEmpty(path)) 
    sPolPath = false; 
else 
    sPolPath = Path.GetPathRoot(path).Length < 2; 
+0

あなたのソリューションの応答をありがとうございました。 –

関連する問題