We all know regular expressions are great for matching patterns and parsing strings, but if you really want to take your Regex game to the next level, spend some time looking at capture groups. Using capture groups–more specifically, named capture groups–makes it easier to manipulate results and replacements, and it also has a fortunate side-effect of improving readability.
To create a named capture group in a .net regular expression, use the syntax “(?<Name>pattern).” The name acts like an inline comment and allows you to reference the group using that name by using “${Name}” in Result and Replace statements.
Let’s look at an example that uses Replace. Social Security numbers are a sensitive piece of information that is often masked when displaying details. Let’s use a regular expression to hide part of the number.
var ssn = "123-45-6789"; var re = new Regex(@"\d{3}-\d{2}-(?<lastFour>\d{4})"); var masked = re.Replace(ssn, "xxx-xx-${lastFour}"); Console.WriteLine("{0} -> {1}", ssn, masked);
123-45-6789 -> xxx-xx-6789
Another common scenario is to extract a piece of data from a string. Here’s another quick example that extracts the month and year from a date string (great for grouping items in a reporting scenario!).
var date = "01/15/2012"; var re = new Regex(@"(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{4})"); var monthYear = re.Match(date).Result("${year}-${month}"); Console.WriteLine("{0} -> {1}", date, monthYear);
01/15/2012 -> 2012-01
Hi,
I am using PRTG network Monitor to create a sensor and graph results. I have a version value in the format 2016.02.23.424 and i want to delete the points such that it is 20160223424
This number increments every so often and i can therefore graph it. Can you advise with this? I need only one regex statement that i can use to get a capture group with the above.
thanks.
Dave
jzxcoy16i4sbb9qg4pch