Quick and Easy Currency Extractor
I have fallen in love with Regular Expressions over the past few months. Over the weekend I replaced some moderately complicated parsing code in an older application with a Regular Expression and found another quick use for one this morning, extracting a currency value.
So here was my problem, I have an application that displays the cost of an item in several ways, the common $##.## or $##.##/[time frame] and so on. I needed to just grab the actual amount to store in my database. A few years ago I would have thought ‘Oh great here go 4-5 hours of my life’. Not anymore today I spent 5 minutes thinking about and testing a simple pattern to extract just the dollar amount.
Potential Text to Extract From
Oranges $4.99/lb
Milk $2.69/quart
Rent $1000/month
Honda Accord $21,000.00
Public Function ExtractDollarAmount(ByVal sDollar As String) As Double
Dim r As New Regex("(\d+\.{1}\d{1,2})")
For Each m As Match In r.Matches(sDollar)
Try
Return Convert.ToDouble(m.Value)
Catch ex As FormatException
'Return -1D
Throw
Catch exo As OverflowException
'Return -2D
Throw
End Try
Next
End Function
C#:
public double ExtractDollarAmount(string sDollar)
{
Regex r = new Regex("(\\d+\\.{1}\\d{1,2})");
foreach (Match m in r.Matches(sDollar))
{
try
{
return Convert.ToDouble(m.Value);
}
catch (FormatException ex)
{
throw;
}
catch (OverflowException exo)
{
throw;
}
}
return -1D;
}
This method is real simple as well as the expression. It does have some faults, but like I said it was 5 minutes of time, but solved a fairly common need I think many of us have. I added this method to the base Page class of this application, but will most likely place it some sort of utility class as I complete abstracting my core framework.
If you have any suggestions on making this a stronger pattern, please feel free to let me know. I am going to see about posting this on RegExLib.com later today.