using System.Text.RegularExpressions;
using System.Collections.Generic;
public static void Main()
Billing address Delivery address
Somewhere else in the Here
string[] fields = { "Name", "Age", "MobileNumber" };
foreach(var field in fields)
var match = Regex.Match(strContent, "\\["+field+"\\]\n(.*)");
if(!match.Success) continue;
Console.WriteLine(field+": "+match.Groups[1].Value);
var headerMatch = Regex.Match(strContent, "(?:^|.* )Billing address(?: .*|$)", RegexOptions.Multiline);
var fieldsMatches = Regex.Matches(headerMatch.Value+" ", "([^ ](?:[^ ]+| [^ ]+)*) +", RegexOptions.Multiline);
var fieldNames = fieldsMatches.Select(m => m.Value.Trim()).ToArray();
var fieldPos = fieldsMatches.Select(m => m.Index).ToArray();
var fieldLengths = fieldsMatches.Select(m => m.Length).ToArray();
var dataLines = Regex.Match(strContent.Substring(headerMatch.Index + headerMatch.Length), "(?:\n.+)*");
var fieldVals = new Dictionary<string, string>();
foreach(var fieldName in fieldNames)
fieldVals.Add(fieldName, "");
foreach(Match line in Regex.Matches(dataLines.Value, ".+"))
foreach(var fieldName in fieldNames)
var pos = fieldPos[fieldNum];
var length = fieldLengths[fieldNum];
string fragment = ls.Length <= pos ? "" : ls.Substring(pos, pos + length > ls.Length ? ls.Length - pos : length);
fragment = fragment.TrimEnd();
var concatenator = fieldVals[fieldName].Length > 0 && fragment.Length > 0 && fragment.Substring(0, 1) != " " ? "\n" : "";
fieldVals[fieldName] += concatenator+fragment;
foreach(var field in fieldVals)
Console.WriteLine(field.Key+": "+field.Value.Replace("\n", " <newline> "));