Мне нужно сопоставить символы между самым внутренним набором скобок в строке, но разрешить пустые символы скобок, такие как '()'. Насколько я могу судить, здесь нужен какой-то негативный взгляд (и он полностью отличается от вопроса, для которого он помечен как дубликат)
Начальная версия, которая не правильно включает в себя '()':
var re = new Regex(@"\(([^()]+)\)");
Некоторые тестовые примеры:
x (a) y -> a
x (a b) y -> a b
x (a b c) y -> a b c
x (a b() c) y -> a b() c
x (a() b() c) y -> a() b() c
x (a b() c()) y -> a b() c()
x (a b(a) c) y -> a
x (a (b() c)) y -> b() c
x () y -> empty
И метод тестирования c # (адаптированный для вашей библиотеки утверждений):
var re = new Regex(@"\(([^()]+)\)");
string[] tests = {
"x (a) y", "a",
"x (a b) y", "a b",
"x (a b c) y", "a b c",
"x (a b() c) y", "a b() c",
"x (a() b() c) y", "a() b() c",
"x (a b() c()) y", "a b() c()",
"x (a b(a) c) y", "a",
"x (a (b() c)) y", "b() c",
"x () y", ""
};
for (int i = 0; i < tests.Length; i+=2)
{
var match = re.Match(tests[i]);
var result = match.Groups[1].Value;
Assert.That(result, Is.EqualTo(tests[i + 1]));
}