VASISTA
VASISTA

Reputation: 75

I want substring from set of string after a pattern exist in c#

I have 3 string ---

m60_CLDdet2_LOSS2CLF_060520469434_R0RKE_52_GU
m60_CLDdet2_LOSS2CLF_060520469434_R10KE_52_TCRER
m60_CLDdet2_LOSS2CLF_060520469434_R0HKE_52_NT

and I want R0RKE_52_GU, R10KE_52_TCRER,R0HKE_52_NT.

Note: m60_CLDdet2_LOSS2CLF_060520469434 is varying so I want to find substring if R0RKE or R10KE or R0HKE exists

Upvotes: 1

Views: 62

Answers (4)

Fabjan
Fabjan

Reputation: 13676

Update: added .Any - it simplifies the code and it's just as same efficient.

If you just need to check for three strings inside string array you can do :

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

Usage: string[] result = GetStrings(dirty, new[] {"R0RKE", "R10KE", "R0HKE"}); Also you can use LINQ query and Regex.Matches as others advised.

Upvotes: 1

hungndv
hungndv

Reputation: 2141

I write it into static method:

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

Hope this help.

Upvotes: 1

Jeffrey Wieder
Jeffrey Wieder

Reputation: 2376

I would suggest using a Regular expression for this, it is much more versatile for pattern matching.

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

Upvotes: 3

Tim Schmelter
Tim Schmelter

Reputation: 460138

I want to find substring if R0RKE or R10KE or R0HKE exists

This LINQ query returns the desired result:

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 

Upvotes: 2

Related Questions