Regex to remove all (non numeric OR period)

Solution 1:

This should do it:

string s = "joe ($3,004.50)";
s = Regex.Replace(s, "[^0-9.]", "");

Solution 2:

The regex is:

[^0-9.]

You can cache the regex:

Regex not_num_period = new Regex("[^0-9.]")

then use:

string result = not_num_period.Replace("joe ($3,004.50)", "");

However, you should keep in mind that some cultures have different conventions for writing monetary amounts, such as: 3.004,50.

Solution 3:

For the accepted answer, MatthewGunn raises a valid point in that all digits, commas, and periods in the entire string will be condensed together. This will avoid that:

string s = "joe.smith ($3,004.50)";
Regex r = new Regex(@"(?:^|[^w.,])(\d[\d,.]+)(?=\W|$)/)");
Match m = r.match(s);
string v = null;
if (m.Success) {
  v = m.Groups[1].Value;
  v = Regex.Replace(v, ",", "");
}

Solution 4:

You are dealing with a string - string is an IEumerable<char>, so you can use LINQ:

var input = "joe ($3,004.50)";
var result = String.Join("", input.Where(c => Char.IsDigit(c) || c == '.'));

Console.WriteLine(result);   // 3004.50