C# 我希望在c中存在一个模式后,从字符串集中得到子字符串#

C# 我希望在c中存在一个模式后,从字符串集中得到子字符串#,c#,substring,C#,Substring,我有三根绳子--- 我想要R0RKE\u 52\u GU,R10KE\u 52\u TCRER,R0HKE\u 52\u NT 注意:m60\u CLDdet2\u LOSS2CLF\u 060520469434是变化的,因此我想在R0RKE或r0ke存在时查找子字符串 如果存在R0RKE、R10KE或R0HKE,我想查找子字符串 此LINQ查询返回所需的结果: var strings=new[]{"m60_CLDdet2_LOSS2CLF_060520469434_R0RKE_52_GU","

我有三根绳子---

我想要
R0RKE\u 52\u GU,R10KE\u 52\u TCRER,R0HKE\u 52\u NT

注意:m
60\u CLDdet2\u LOSS2CLF\u 060520469434
是变化的,因此我想在
R0RKE
r0ke
存在时查找子字符串

如果存在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 
如果存在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 

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

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

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

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

更新:添加。任何-它简化了代码,并且同样有效

如果只需要检查字符串数组中的三个字符串,可以执行以下操作:

    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();
    }
static string[]GetStrings(string[]dirty,string[]lookUpValues)
{
列表结果=新列表();
for(int i=0;i
用法:
string[]result=GetStrings(脏的,新的[]{“R0RKE”、“R10KE”、“R0HKE”})

您还可以使用
LINQ
查询和
Regex.Matches
,如其他人建议的那样

Update:added.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();
    }
static string[]GetStrings(string[]dirty,string[]lookUpValues)
{
列表结果=新列表();
for(int i=0;i
用法:
string[]result=GetStrings(脏的,新的[]{“R0RKE”、“R10KE”、“R0HKE”})

您还可以使用
LINQ
查询和
Regex.Matches
,如其他人建议的那样

我将其写入静态方法:

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));
}

希望对您有所帮助。

我将其写入静态方法:

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));
}

希望有帮助。

您是否尝试过编写代码?你应该发布它。你试过写代码吗?你应该把它贴出来。谢谢蒂姆,这很有帮助,因为我是c#和linqpad的新手。谢谢蒂姆,这很有帮助,因为我是c#和linqpad的新手