【问题标题】:Is it a drive path or another? Check with Regex它是驱动路径还是其他路径?用正则表达式检查
【发布时间】:2017-03-22 06:56:03
【问题描述】:

我想检查它是驱动器路径还是“pol”路径。 为此我已经写了一个小代码,不幸的是,我总是返回 true。

正则表达式可能不正确\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;
}

【问题讨论】:

  • 区分 pol 或驱动路径的规则是什么?对于给定的输入示例:return path.StartsWith("/");
  • 为了让问题更清楚,请同时提供一组测试用例

标签: c# regex


【解决方案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)字符串是 pol-path 还是驱动器路径。根据决定,支票将是

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

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

【讨论】:

  • 感谢先生您的解决方案响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 2014-03-09
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多