If you use the lookbehind, you don't need the capture groups and you can move the \D*
into the lookbehind.
To get the values, you can match 1+ digits followed by optional repetitions of ,
and 1+ digits.
Note that your example data contains comma's and no dots, and using ?
as a quantifier means 0 or 1 time.
(?<=Top Pay\D*)\d+(?:,\d+)*
The pattern matches:
(?<=Top Pay\D*)
Positive lookbehind, assert what is to the left is Top Pay
and optional non digits
\d+
Match 1+ digits
(?:,\d+)*
Optionally repeat a ,
and 1+ digits
See a .NET regex demo and a C# demo
string pattern = @"(?<=Top Pay\D*)\d+(?:,\d+)*";
string input = @"Top Pay: 1,000,000
Top Pay: 888,888";
RegexOptions options = RegexOptions.IgnoreCase;
foreach (Match m in Regex.Matches(input, pattern, options))
{
var topPayMatch = int.Parse(m.Value, System.Globalization.NumberStyles.AllowThousands);
Console.WriteLine(topPayMatch);
}
Output
1000000
888888