【问题标题】:I want substring from set of string after a pattern exist in c#在 C# 中存在模式后,我想要字符串集中的子字符串
【发布时间】:2015-06-30 13:27:18
【问题描述】:

我有 3 个字符串 ---

m60_CLDdet2_LOSS2CLF_060520469434_R0RKE_52_GU
m60_CLDdet2_LOSS2CLF_060520469434_R10KE_52_TCRER
m60_CLDdet2_LOSS2CLF_060520469434_R0HKE_52_NT

我想要R0RKE_52_GU, R10KE_52_TCRER,R0HKE_52_NT

注意:m60_CLDdet2_LOSS2CLF_060520469434 是变化的,所以如果存在R0RKER10KER0HKE,我想查找子字符串

【问题讨论】:

  • 您是否尝试过编写任何代码?你应该发布它。

标签: c# substring


【解决方案1】:

我建议为此使用正则表达式,它在模式匹配方面更加通用。

var matches = System.Text.RegularExpressions.Regex.Matches(text, @"(R0RKE|R10KE|R0HKE).*");

【讨论】:

    【解决方案2】:

    如果存在 R0RKE 或 R10KE 或 R0HKE,我想查找子字符串

    此 LINQ 查询返回所需的结果:

    var strings=new[]{"m60_CLDdet2_LOSS2CLF_060520469434_R0RKE_52_GU","m60_CLDdet2_LOSS2CLF_060520469434_R10KE_52_TCRER","m60_CLDdet2_LOSS2CLF_060520469434_R0HKE_52_NT"};
    
    string[] starts = { "R0RKE", "R10KE", "R0HKE" };
    var result = strings
      .Select(str => new { str, match = starts.FirstOrDefault(s => str.IndexOf("_" + s) >= 0)})
      .Where(x => x.match != null)
      .Select(x => x.str.Substring(x.str.IndexOf(x.match)));
    
    Console.Write(String.Join(",", result)); // R0RKE_52_GU,R10KE_52_TCRER,R0HKE_52_NT 
    

    【讨论】:

    • 感谢蒂姆,这对我是 c# 和 linqpad 的新手很有帮助
    【解决方案3】:

    我把它写成静态方法:

    private static string TakeIt(string inputString)
    {
        if (!Regex.IsMatch(inputString, "(R0RKE|R10KE|R0HKE)"))
        {
            return string.Empty;
        }
    
        var regex = new Regex(@"_");
        var occurances = regex.Matches(inputString);
        var index = occurances[3].Index + 1;
        return inputString.Substring(index, inputString.Length - index);
    }
    
    void Main()
    {
        var string1 = "m60_CLDdet2_LOSS2CLF_060520469434_R0RKE_52_GU";
        var string2 = "m60_CLDdet2_LOSS2CLF_060520469434_R10KE_52_TCRER";
        var string3 = "m60_CLDdet2_LOSS2CLF_060520469434_R0HKE_52_NT";
        var string4 = "m60_CLDdet2_LOSS2CLF_060520469434_hhhhh";
    
        Console.WriteLine(TakeIt(string1));
        Console.WriteLine(TakeIt(string2));
        Console.WriteLine(TakeIt(string3));
        Console.WriteLine(TakeIt(string4));
    }
    

    希望对您有所帮助。

    【讨论】:

      【解决方案4】:

      更新:添加了 .Any - 它简化了代码并且同样高效。

      如果您只需要检查字符串数组中的三个字符串,您可以这样做:

          static string[] GetStrings(string[] dirty, string[] lookUpValues)
          {
              List<string> result = new List<string>();
              for (int i = 0; i < dirty.Length; i++) if (lookUpValues.Any(dirty[i].Contains)) result.Add(dirty[i]);            
              return result.ToArray();
          }
      

      用法:string[] result = GetStrings(dirty, new[] {"R0RKE", "R10KE", "R0HKE"}); 您也可以按照其他人的建议使用LINQ 查询和Regex.Matches

      【讨论】:

        猜你喜欢
        • 2021-10-19
        • 2016-06-26
        • 2014-10-31
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 2017-10-14
        相关资源
        最近更新 更多