using System.Text.RegularExpressions;
private static readonly Regex EffectivenessMessageRegex = new Regex(@"^(\d{4})000-000\s=\s(\d{1,4});011-000\s=\s(\d{1,6});001-000\s=\s(\d{1,6});040-000\s=\s(\w{1,20});012-000\s=\s(\w{1,12});940-000\s=\s(\w{3});942-000\s=\s(\w{1,15});(941-000\s=\s(\w{1,8})|);023-000\s=\s(\d{1,6});022-000\s=\s(\d{1,4});953-000\s=\s((\w|\W){1,200});002-000\s=\s(\d{1,10});900-000\s=\s(\d);901-000\s=\s(\d{1,2});(.*)$", RegexOptions.Compiled);
private static readonly Regex ProductInfoRegex = new Regex(@".*?=(.*?);.*?=(.*?);.*?=(.*?);.*?=(.*?);.*?=(.*?);.*?=(.*?);", RegexOptions.Compiled);
public static void Main()
var ky9Message = "9999000-000 = 0200;011-000 = 800300;001-000 = 123456;040-000 = VMS;012-000 = 000000001234;940-000 = 003;942-000 = 22540247000133;941-000 = 123;023-000 = 121024;022-000 = 1202;953-000 = %Joao de Deus6as4d4asd8as6d;002-000 = 12345670;900-000 = 0;901-000 = 02;902-000 = 12345687979;906-000 = U;905-000 = 010;910-000 = 0005000;911-000 = 0002500;914-000 = sda6sd4;902-000 = 12345687979;906-000 = U;905-000 = 010;910-000 = 0005000;911-000 = 0002500;914-000 = asap;";
Console.WriteLine("Ky9 String: {0}", ky9Message);
var match = EffectivenessMessageRegex.Match(ky9Message);
Console.WriteLine("Invalid Ky9 Message");
Console.WriteLine("Captured Groups Count {0}", match.Groups.Count);
for (var i = 1; i <= match.Groups.Count; i++)
Console.WriteLine("Group {0}, Value: {1} ", i, match.Groups[i].Value);
var itensQuantity = int.Parse(match.Groups[17].Value);
var items = match.Groups[18].Value;
string[] separator = { "902-000" };
var itemsList = items.Split(separator, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in itemsList)
var productInfoMatch = ProductInfoRegex.Match(item);
Console.WriteLine("===========");
Console.WriteLine("Product EAN: {0}", productInfoMatch.Groups[1].Value);
Console.WriteLine("Product Packing Type: {0}", productInfoMatch.Groups[2].Value);
Console.WriteLine("Product Quantity: {0}", productInfoMatch.Groups[3].Value);
Console.WriteLine("Gross Price: {0}", productInfoMatch.Groups[4].Value);
Console.WriteLine("Net Price: {0}", productInfoMatch.Groups[5].Value);
Console.WriteLine("Aditional Information: {0}", productInfoMatch.Groups[6].Value);
Console.WriteLine("===========");