Question:
How to use Named Capture Groups with C# Regular Expression class (Regex)?Answer:
Capture Groups are usually marked with parenthesis '()' in a regular expression.Named Capture Groups work the same. You'll just put a name mark at the beginning of the capture group.
Like this: (?<lapin>bunny) or (?'lapin'bunny) -- this captures 'bunny' and calls the group 'lapin'.
Here is an example
I want to extract the string after pageName and pageTopic.
In the code we ask the match for a capture group of each known name and get its first capture.
string val = "pageNameQuick_pageTopicSearch"; if (val != null) { // using named capture groups Regex reg = new Regex(@"pageName(?<pn>.*)_pageTopic(?<pt>.*)"); Match match = reg.Match(val); if (match != null && match.Success) { // Safe function to get named captures Func<Match, string, string> GetCaptGroupValue = (m, n) => m.Groups[n] != null ? (m.Groups[n].Captures[0] != null ? m.Groups[n].Captures[0].Value : "") : ""; string pageName = GetCaptGroupValue(match, "pn"); string pageTopic = GetCaptGroupValue(match, "pt"); System.Console.WriteLine("Page name : {0}; page topic: {1}", pageName, pageTopic); } }
This will print: "Page name : Quick; page topic: Search"
No comments:
Post a Comment