Похоже, вам не нужно сложное регулярное выражение: возьмите строку между двумя квадратными скобками и разделите захваченное содержимое одинарной кавычкой или запятой или просто сопоставьте то, что вам нужно.
Дано
var text = "cov('Age', ['5','7','9'])";
Подходы могут быть следующими:
// Split captured text with ' and ,
var results = Regex.Matches(text, @"\[([^][]+)]")
.Cast<Match>()
.Select(x => x.Groups[1].Value.Split('\'', ',').Where(c => !string.IsNullOrEmpty(c)));
Или сопоставить строки в скобках, а затем извлечь из них все 1+-значные куски:
var results1 = Regex.Matches(text, @"\[([^][]+)]")
.Cast<Match>()
.Select(x => Regex.Matches(x.Groups[1].Value, @"\d+"));
Или просто извлечьвсе числа внутри [...]
:
var results = Regex.Matches(text, @"(?<=\[[^][]*)\d+(?=[^][]*])").Cast<Match>().Select(x => x.Value);
Здесь регулярное выражение соответствует
(?<=\[[^][]*)
- позиции, которой предшествует [
и любаяколичество символов, отличных от [
и ]
\d+
- 1+ цифр (?=[^][]*])
- позиция с любыми 0+ символами, кроме [
и ]
а затем ]
.
См. онлайн-демонстрацию C # .
Это становится немного более сложным дляизвлечь любое число , заменить \d+
на [-+]?\d*\.?\d+([eE][-+]?\d+)?