This time the article shows you how to find a specific occurrence of a match within a string. For example, you want to find the third occurrence of a word or the second occurrence of a Social Security Number. In addition, you may need to find every third occurrence of a word in a string.
To put it simple, to find a particular occurrence of a match in a string, simply subscript the array returned from Regex.Matches.

public static Match FindOccurrenceOf(string source, string pattern,
                                     int occurrence)
{
    if (occurrence < 1)
    {
        throw (new ArgumentException("Cannot be less than 1",
                                     "occurrence"));
    }

    // Make occurrence zero-based
    --occurrence;

    // Run the regex once on the source string
    Regex RE = new Regex(pattern, RegexOptions.Multiline);
    MatchCollection theMatches = RE.Matches(source);

    if (occurrence >= theMatches.Count)
    {
        return null;
    }
    else
    {
        return (theMatches[occurrence]);
    }
}

To find each particular occurrence of a match in a string, build an ArrayList on the fly:

public static ArrayList FindEachOccurrenceOf(string source, string pattern,
                                             int occurrence)
{
    ArrayList occurrences = new ArrayList();

    // Run the regex once on the source string
    Regex RE = new Regex(pattern, RegexOptions.Multiline);
    MatchCollection theMatches = RE.Matches(source);

    for (int index = (occurrence - 1);
      index < theMatches.Count; index += occurrence)
    {
        occurrences.Add(theMatches[index]);
    }

    return (occurrences);
}

The following method shows how to invoke the two previous methods:

public static void TestOccurrencesOf()
{
    Match matchResult = FindOccurrenceOf(
                   "one two three one two three one two three one"
                   + " two three one two three one two three", "two", 2);
    if (matchResult != null)
        Console.WriteLine(matchResult.ToString() + "t" +
                          matchResult.Index);

    Console.WriteLine();
    ArrayList results = FindEachOccurrenceOf(
                   "one one two three one two three one two" +
                   " three one two three", "one", 2);
    foreach (Match m in results)
        Console.WriteLine(m.ToString() + "t" + m.Index);
}

The first method, FindOccurrenceOf, returns a particular occurrence of a regular expression match. The occurrence you want to find is passed in to this method via the occurrence parameter. If the particular occurrence of the match does not exist-for example, you ask to find the second occurrence, but only one occurrence exists-a null is returned from this method. Because of this, you should check that the returned object of this method is not null before using that object. If the particular occurrence exists, the Match object that holds the match information for that occurrence is returned.

The second method, FindEachOccurrenceOf, works similar to the FindOccurrenceOf method, except that it continues to find a particular occurrence of a regular expression match until the end of the string is reached. For example, if you ask to find the second occurrence, this method would return an ArrayList of zero or more Match objects. The Match objects would correspond to the second, fourth, sixth, and eighth occurrence of a match and so on until the end of the string is reached.

Popularity: 3% [?]