
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Extracting Groups from a MatchCollection
|
561
the regular expression will catch the entire line, not each tag separately. You could
change the regular expression from
<.*> to <[^>]*> to match only up to the closing >
([^>]* matches everything that is not a >). However, this will fail in the CDATA sec-
tion, matching
<![CDATA[<escaped>, <>, and <chars> instead of <![CDATA[<escaped> <>
<chars>>>>>]]>
. The more complicated @"(<!\[CDATA.*>|<[^>]*>)" will match either
<!\[CDATA.*> (a greedy match for everything within the CDATA section) or <[^>]*>,
described previously.
See Also
See the “.NET Framework Regular Expressions” and “SortedList Class” topics in the
MSDN documentation.
10.2 Extracting Groups from a MatchCollection
Problem
You have a regular expression that contains one or more named groups, such as the
following:
\\\\(?<TheServer>\w*)\\(?<TheService>\w*)\\
where the named group TheServer will match any server name within a UNC string,
and
TheService will match any service name within a UNC string.
You need to store the groups that are returned by this regular expression in a keyed
collection (such as a
Dictionary<string, Group>) in which the key is the group name.
Solution
The ExtractGroupings method shown in Example 10-3 obtains a set of Group objects
keyed by their matching group name.