using System.Collections.Generic;
using System.Text.RegularExpressions;
List<string> cdcodes = new List<string>();
cdcodes.Add("CPM2430_CD1");
cdcodes.Add("IML_CPM_20");
cdcodes.Add("STKA_919_247WUP");
cdcodes.Add("STKA_418_AATDV1");
cdcodes.Add("STKA_818_BITDOSHH");
cdcodes.Add("STKA_919_BBTPWV1");
cdcodes.Add("STKA_219_D247DHHV1");
cdcodes.Add("STKA_223_OWT-EB");
cdcodes.Add("STKA_323_CZ-LR");
cdcodes.Add("CAR CLASS034/2");
cdcodes.Add("CPM2430(CD2)");
cdcodes.Add("STKA_223_TRT3-WO");
foreach (string cdc in cdcodes)
Console.WriteLine("================");
public void SplitCDCode(string input)
if (input.Count(x => x == '-') >= 2)
SplitByPunctuations(input, '-');
else if (input.Count(x => x == ' ') >= 2)
SplitByPunctuations(input, ' ');
else if (input.Count(x => x == '_') >= 2)
SplitByPunctuations(input, '_');
SplitByAlphaNumeric(input);
public void SplitByAlphaNumeric(string input)
Console.WriteLine("input: " + input);
var stripped = input.StripNonAlphaNumeric().ToLower();
var NumberGroup = GetNumberGroups(input);
if (NumberGroup.Count >= 2 && input.HasSpecialCharacter()) {
var u1String = NumberGroup.OrderByDescending(s => s.Length).FirstOrDefault();
u1 = u1String.Length > 6 ? u1String.Substring(0,6): u1String;
var u1StringStartIndex = stripped.IndexOf(u1String);
var uString = stripped.Substring(0,u1StringStartIndex);
u = uString.Length > 6 ? uString.Substring(0,6): uString;
var u2StartIndex = uString.Length + u1String.Length;
var u2String = stripped.Substring(u2StartIndex, stripped.Length-u2StartIndex);
u2 = u2String.Length > 6 ? u2String.Substring(u2String.Length - 6) : u2String;
var u2String = string.Concat(stripped.ToArray().Reverse().TakeWhile(char.IsLetter).Reverse());
u2 = string.IsNullOrEmpty(u2String) ? "" : u2String.Length > 6 ? u2String.Substring(u2String.Length - 6, 6) : u2String;
string u1String = stripped.Substring(0, stripped.Length - u2.Length);
u1 = string.Concat(u1String.ToArray().Reverse().TakeWhile(char.IsNumber).Reverse());
if (string.IsNullOrEmpty(u1))
u1 = string.Concat(u1String.ToArray().Reverse().TakeWhile(char.IsLetter).Reverse());
string uString = stripped.Substring(0, stripped.Length - (u1.Length + u2.Length));
u = uString.Length > 6 ? uString.Substring(0, 6) : uString;
Console.WriteLine(" u: " + u);
Console.WriteLine("u1: " + u1);
Console.WriteLine("u2: " + u2);
public void SplitByPunctuations(string input, char splitChar)
Console.WriteLine("input: " + input);
var stringSplits = input.ToLower().Split(splitChar);
stringSplits = stringSplits.Where(x => !string.IsNullOrEmpty(x)).Select(x=> x.StripNonAlphaNumeric()).ToArray();
uString = stringSplits[index];
if(index<stringSplits.Length){
if(uString.Length<6 && (stringSplits[index-1].All(Char.IsLetter) && stringSplits[index].All(Char.IsLetter))){
uString+= stringSplits[index].Length > 6 ? stringSplits[index].Substring(0, 6) : stringSplits[index];
u1String = stringSplits[index];
if(index<stringSplits.Length){
if(u1String.Length<6 && ((stringSplits[index-1].All(Char.IsLetter) && stringSplits[index].All(Char.IsLetter)) || (stringSplits[index-1].All(Char.IsNumber) && stringSplits[index].All(Char.IsNumber))) ){
u1String+= stringSplits[index].Length > 6 ? stringSplits[index].Substring(0, 6) : stringSplits[index];
u2String = stringSplits.Length > index ? stringSplits[index] : "";
u = uString.Length > 6 ? uString.Substring(0, 6) : uString;
u1 = u1String.Length > 6 ? u1String.Substring(0, 6) : u1String;
u2 = u2String.Length > 6 ? u2String.Substring(u2String.Length - 6) : u2String;
Console.WriteLine(" u: " + u);
Console.WriteLine("u1: " + u1);
Console.WriteLine("u2: " + u2);
public List<string> GetNumberGroups(string input){
List<string> groups = new List<string>();
.Matches(input, "[0-9]+")
.Select(match => match.Value.ToString()).ToList();
public static class Extensions
public static bool HasLength(this string value)
return !string.IsNullOrEmpty(value);
public static string StripNonAlphaNumeric(this string valueToBeStripped, bool includeWhiteSpace = false, params char[] allowedCharacteres)
if (!valueToBeStripped.HasLength())
char[] array = valueToBeStripped.ToCharArray();
array = Array.FindAll(array, (char character) => char.IsLetterOrDigit(character) || (includeWhiteSpace && char.IsWhiteSpace(character)) || allowedCharacteres.Contains(character));
return new string (array);
public static long Decode(this string input)
IEnumerable<char> enumerable = input.ToLower().Reverse();
foreach (char item in enumerable)
num += "0123456789abcdefghijklmnopqrstuvwxyz".IndexOf(item) * (long)Math.Pow(36.0, num2);
public static bool HasSpecialCharacter(this string value)
return !value.All(Char.IsLetterOrDigit);