Проблема легко идентифицируется: «Катастрофический возврат» .
Каждый раз, когда вы видите феномен "если совпадение существует, оно срабатывает, если совпадения не существует, оно занимает вечность", вы можете быть уверены, что причина.
Я предлагаю другое регулярное выражение, которое делает меньше возврата. Атомная группировка может помочь свести к минимуму количество шагов для возврата:
Dim pattern As String = "\{\{IF\((?>(?:(?!,,,).)+),,,(?>(?:(?!\)\}\}).)+)\}\}"
Dim mc As RegularExpressions.MatchCollection = Regex.Matches(txtContent.Text, pattern)
Шаблон (не знаю, буду ли я записывать все, что вам нужно - добавьте скобки там, где считаете нужным):
\{\{IF\( # "{{IF("
(?>(?:(?!,,,).)+) # atomic group: any char up to the ",,,"
,,, # ",,,"
(?>(?:(?!\)\}\}).)+) # atomic group: any char up to the ")}}"
\)\}\} # ")}}"