Check an example:
string input = "{s_name=length,s_value=240.000 supplier A,s_unit=1.0mm};{s_name=width,s_value=152.000,s_unit=1.0mm};{s_name=thickness,s_value=1.600 supplier B,s_unit=1.0mm};{s_name=speed,s_value=45,s_unit=1.0mm/s};\r\n{s_name=position_X, s_value = 240.000, s_unit = 1.0mm };{s_name=position_Y, s_value=240.000, s_unit=}\r\n";
string name = "length";
Match m = Regex.Match( input, @"\{\s*s_name\s*=\s*" + Regex.Escape( name ) + @"\s*,\s*s_value\s*=\s*(?<value>.*?)\s*,\s*s_unit\s*=\s*(?<unit>.*?)\s*\}" );
if( m.Success )
{
string value = m.Groups["value"].Value;
string unit = m.Groups["unit"].Value;
Console.WriteLine( $"s_name = {name}" );
Console.WriteLine( $"s_value = {value}" );
Console.WriteLine( $"s_unit = {unit}" );
Match m2 = Regex.Match( value, @"^(\+|-)?\d+(\.\d+)?" );
if( m2.Success )
{
decimal d = decimal.Parse( m2.Value, CultureInfo.InvariantCulture );
Console.WriteLine( $"numeric value = {d}" );
}
}