using System.Text.RegularExpressions;
using System.Globalization;
using System.Collections.Generic;
public static void Main()
foreach(var d in GetPrices("28.54;0.17;1.72;2.92 руб./м2", out var postfix))
Console.WriteLine($"{d} {postfix}");
public static decimal[] GetPrices(string rawValue, out string postfix)
if (string.IsNullOrWhiteSpace(rawValue)) return new decimal[0];
var values = rawValue.Split(';');
if (values.Length == 0) return new decimal[0];
var r = new Regex(@"^(-?\s*\d+,?\d*),?(.*)$");
var numValues = new List<decimal>();
for (var i = 0; i < values.Length; i++)
var value = values[i].Trim('"');
var match = r.Match(value.Replace('.', ','));
if (match.Groups.Count == 3)
var parsedValue = decimal.Parse(match.Groups[1].Value.Replace(" ", ""), new CultureInfo(""));
if (parsedValue != 0) numValues.Add(parsedValue);
if (string.IsNullOrWhiteSpace(postfix)) postfix = match.Groups[2].Value.Replace(',', '.');
else if (!match.Success) postfix = value;
return numValues.ToArray();