总是返回false的正则表达式

时间:2014-03-17 21:21:03

标签: c# regex

目的:

使用正则表达式仅显示路径的实际文件夹名称。例如,

C:\Users\Harti\GitHub

应该简化为

GitHub

应该有一个进一步的规则来阻止用户将驱动器作为文件夹输入。


的问题:

  1. if条件返回False,我无法弄清楚原因。

  2. 带有Regex.Replace(...)的行抛出一个ArgumentException告诉我(粗略翻译),在分析序列^.+\([^\]+)$时,那里"是一个未完成的[]子句"。


  3. 我的想法:

    1. 我选择的任何编辑都标记着" C:\"作为指定表达式的匹配。

    2. [^\\]中的双反斜杠可能会被视为实际转义结束方括号,从而使正则表达式无效。但是,对字符串使用@"..."会导致相同的异常。


    3. 请你指出我可能遗失的任何东西?我对VS和C#完全陌生,所以可能还有一些我不知道的异常。

      代码:

      static void Main(string[] args)
      {
          string folderPath = "C:\\";
          string disallowedPattern = "^[A-Z]:\\$";
      
          if (Regex.IsMatch(folderPath, disallowedPattern))
          {
              Console.WriteLine("You chose a drive! Not cool!");
          }
          else
          {
              string suggestedProjectName = Regex.Replace(folderPath, "^.+\\([^\\]+)$", "$1");
              Console.WriteLine(suggestedProjectName);
          }
      }
      

2 个答案:

答案 0 :(得分:3)

为什么不使用System.IO.Path

而不是使用正则表达式来解析路径信息

答案 1 :(得分:2)

可能你应该写

string disallowedPattern = "^[A-Z]:\\\\$";

因为反斜杠必须在正则表达式和C字符串文字中进行转义。