using System.Text.RegularExpressions;
public static void Main()
Console.WriteLine(GetNumericValue(input,'R'));
Console.WriteLine(UpdateNumericValue(input, 'R', 7));
Console.WriteLine(GetNumericValue(input, 'R'));
Console.WriteLine(UpdateNumericValue(input, 'R', 3.5));
Console.WriteLine(GetNumericValue(input, 'R'));
Console.WriteLine(UpdateNumericValue(input, 'R', 765));
Console.WriteLine(GetNumericValue(input, 'C'));
Console.WriteLine(UpdateNumericValue(input, 'C', 42));
Console.WriteLine(GetNumericValue(input, 'F'));
Console.WriteLine(UpdateNumericValue(input, 'F', 42));
input = "666ABC666ABC555";
Console.WriteLine(GetNumericValue(input, 'C'));
Console.WriteLine(UpdateNumericValue(input, 'C', 42));
input = "BR11.05AU17.51";
Console.WriteLine(GetNumericValue(input, 'R'));
Console.WriteLine(UpdateNumericValue(input, 'R', 7));
static string GetNumericValue(string input, char c)
Regex regex = new Regex(@$"{Regex.Escape(c.ToString())}([-+]?\d+\.?\d*)");
var match = regex.Match(input);
return match.Groups[1].Value;
static string UpdateNumericValue(string input, char c, double newVal)
var needle = $"{c}{GetNumericValue(input, c)}";
if (!string.IsNullOrEmpty(needle))
var regex = new Regex(Regex.Escape(needle));
return regex.Replace(input, $"{c}{newVal.ToString()}", 1);