SiberianGuy
SiberianGuy

Reputation: 25292

C# Regex group multiple captures

The following code return 1:

Regex.Match("aaa", "(a)").Groups[1].Captures.Count

But I expect to receive 3: I see three captures of a.

Upvotes: 11

Views: 20865

Answers (2)

R. Martinho Fernandes
R. Martinho Fernandes

Reputation: 234384

You need to either get the match count:

Regex.Matches("aaa", "(a)").Count

Or add a quantifier to the regex:

Regex.Match("aaa", "(a)+").Groups[1].Captures.Count

The regex (a) matches only a single a. In the first example above, that regex can be matched three times.

In the second example the regex matches several as at once and captures each one into group 1.

To make a choice you should consider the following differences between them:

Regex.Matches("aaba", "(a)").Count // this is 3
Regex.Match("aaba", "(a)+").Groups[1].Captures.Count // this is 2

The second only yields two captures because it matches the first sequence of two as but then it stops matching when it finds a b. The + quantifier only matches unbroken sequences.

Upvotes: 19

Steve B
Steve B

Reputation: 37660

Use Regex.Matches method instead ?

Upvotes: 4

Related Questions