【问题标题】:Use C# to check is string contains an integer in a given range of numbers使用 C# 检查字符串是否包含给定数字范围内的整数
【发布时间】:2020-11-25 23:42:42
【问题描述】:

我有一个字符串列表,其中一些格式为“LAP1_...”、“LAP2_...”、...、“LAP9_...”。我想计算所有遵循“LAP”格式的字符串加上任何整数1-9。有没有办法检查一个字符串是否包含一个包含给定范围内任何整数的子字符串?

我显然可以这样写代码:

 var lapCount = recentRecords.Where(x => x.nkFileName.Contains("LAP1")||x.nkFileName.Contains("LAP2") || x.nkFileName.Contains("LAP3")
            || x.nkFileName.Contains("LAP4") || x.nkFileName.Contains("LAP5") || x.nkFileName.Contains("LAP6") || x.nkFileName.Contains("LAP7")
            || x.nkFileName.Contains("LAP8") || x.nkFileName.Contains("LAP9")).Count();

但这似乎是不必要的长。

我希望搜索看起来像这样:

 var lapCount = recentRecords.Where(x => x.nkFileName.Contains("LAP[1-9]")).Count();

【问题讨论】:

  • 你实际上几乎是there
  • ... Regex.IsMatch(x.nkFileName, "LAP[1-9]") 怎么样?
  • 我将代码更改为:var lapCount = recentRecords.Where(x => Regex.IsMatch(x.nkFileName, "LAP[1-9]")).Count();,但现在出现以下错误:“LINQ to Entities 无法识别方法 'Boolean IsMatch(System.String, System.String)' 方法,并且此方法无法转换为商店表达式。”
  • 重要的是告诉我们您正在使用 LINQ to Entity Framework,然后您正在使用什么 EF:EF 6.x / EF Core 2.0 / EF Core 2.1 / EF Core 3.x?鉴于该错误,recentRecords 显然不是 List<string>

标签: c# string search


【解决方案1】:

你可以使用 char.IsDigit https://docs.microsoft.com/de-de/dotnet/api/system.char.isdigit?view=netcore-3.1

string stringWithNumber = "样本 43 字符串 7 和数字 42"; stringWithNumber.Any(char.IsDigit);

【讨论】:

    【解决方案2】:

    反转测试以便翻译:

    var lapCount = recentRecords.Where(r => r.nkFileName.StartsWith("LAP") && "0123456789".Contains(r.nkFileName.Substring(3,1))).Count();
    

    【讨论】:

      【解决方案3】:

      你可以试试下面的代码sn-p:

         List<string> strList = new List<string>()
          {
                  "LAP1","ABC","explorer","LAP2","LAP3","xyz"
          };
          var myRegex=new Regex(@"LAP[0-9]");
          List<string> resultList=strList.Where(f => myRegex.IsMatch(f)).ToList();
      

      结果是:

      所以在你的情况下,我相信你可以使用:

      var myRegex=new Regex(@"LAP[0-9]");   
      List<string> resultList=recentRecords.Where(f => myRegex.IsMatch(f.nkFileName)).ToList();
      

      确保recentRecords 是一个字符串列表。

      【讨论】:

        猜你喜欢
        • 2020-04-27
        • 2011-03-23
        • 1970-01-01
        • 2015-02-07
        • 2014-12-05
        • 2012-06-27
        • 1970-01-01
        • 2011-02-24
        • 2012-02-11
        相关资源
        最近更新 更多