using System.Text.RegularExpressions; namespace RhSolutions.Parsers.Pipes; public abstract class DrinkingWaterHeatingPipe : IProductParser { protected static readonly Regex _diameter = new(@"([\b\D]|^)?(?16|20|25|32|40|50|63)([\b\D]|$)"); protected static readonly Regex _type = new(@"([\b\W])(?бухт|отр|штанг)([\b\w\.\s])"); protected virtual string _title { get; } = string.Empty; protected virtual Dictionary _diameterNames { get; } = new() { [16] = "16x2,2", [20] = "20x2,8", [25] = "25x3,5", [32] = "32x4,4", [40] = "40x5,5", [50] = "50x6,9", [63] = "63x8,6" }; protected virtual Dictionary _makeUp { get; } = new() { ["бухт"] = "бухта", ["штанг"] = "прям.отрезки", ["отр"] = "прям.отрезки" }; public bool TryParse(string input, out string output) { output = string.Empty; var diameterMatch = _diameter.Match(input); if (!diameterMatch.Success) { return false; } var diameter = int.Parse(diameterMatch.Groups["Diameter"].Value); var typeMatch = _type.Match(input); if (typeMatch.Success) { var type = typeMatch.Groups["Type"].Value; output = $"Труба {_title} {_diameterNames[diameter]} {_makeUp[type]}"; } else if (diameter < 32) { output = $"Труба {_title} {_diameterNames[diameter]} {_makeUp["бухт"]}"; } else { output = $"Труба {_title} {_diameterNames[diameter]} {_makeUp["отр"]}"; } return true; } }