【问题标题】:C# incorrect regexC# 不正确的正则表达式
【发布时间】:2011-12-05 07:35:57
【问题描述】:

我想搜索所有具有以下名称的文件:Resources.Designer.pas、Settings.Designer.pas。

我的代码行是:

if (myString.Equals("*.Designer.pas"))

但它没有进入 if 块。为什么?

【问题讨论】:

  • 这不是正则表达式。 String.Equals 正在检查确切的值。如果要使用正则表达式和* 通配符,请检查IsMatch 方法。

标签: c# regex .net-2.0


【解决方案1】:
if (myString.EndsWith(".Designer.pas"))

【讨论】:

    【解决方案2】:

    我想你也可以使用:

    if (myString.EndsWith(".Designer.pas", 
                          StringComparison.InvariantCultureIgnoreCase))
    

    【讨论】:

      【解决方案3】:

      在正则表达式中,. 是一个特殊字符,表示“匹配任何字符”。如果要显式匹配句点,则必须对其进行转义。这应该有效:

      string pattern = @".*\.Designer\.pas";
      if (Regex.IsMatch(myString, pattern))
      

      更多信息请查看thismsdn 文章。但是,上面的内容将匹配foo.Designer.pas.bar 形式的任何内容,其中foobar 代表任何字符串。如果您想明确匹配任何以.Designer.pas 结尾的文件,您应该使用如下内容:

      string pattern = @".*\.Designer\.pas$";
      if (Regex.IsMatch(myString, pattern))
      

      $ 将指示正则表达式引擎匹配该子字符串并确保它是字符串的最后一部分。

      【讨论】:

      • 我已经对答案进行了更改。
      【解决方案4】:

      你需要

      Regex.IsMatch(str, "\.Designer\.pas$")
      

      确保给定的字符串以“.Designer.pas”结尾。

      【讨论】:

        【解决方案5】:

        因为您引用了文字字符串“*.Designer.pas”。这应该是不存在的。我建议你尝试搜索“.Designer.pas”这样你就会得到你想要的结果..

        【讨论】:

          【解决方案6】:

          如果您要查找文件系统上与特定模式匹配的文件列表,您可以使用Directory.GetFiles

          foreach(string f in Directory.GetFiles("C:\\YourPath", "*.Designer.pas"))
          {
              ...
          }
          

          您也可以使用. 代替C:\\YourPath 来使用当前目录。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-05
            • 1970-01-01
            • 2022-08-08
            相关资源
            最近更新 更多