Что было бы правильным образцом для этого?
Лучшая практика заключается не в том, чтобы соответствовать неизвестному, а по дизайну шаблона после известных.В подобной практике не слепое совпадение с использованием .*
(ноль или более всего) для обратного отслеживания может быть ужасно медленным; зачем добавлять к сложности, когда это не требуется.
Откровенно говоря, необходимо использовать одно или более использования *
, но не более того, что должно действительно использоваться, когда определенные элементы могут не отображаться.
Строка может варьироваться.
Оказывается своим примером, что если бы мы должны были думать, как компилятор, маркеры разделяются либо ,
или окончание ]
. Итак, давайте разберемся с этим знанием (известными).
Лучший способ захвата - использовать до тех пор, пока не будет найдено известное. Использование не набор [^ ]
образец лучше всего; который говорит совпадение персонажа не в этом наборе. Затем добавьте наш общий квантификатор +
, который говорит один или несколько. Эффективно заменив .*
на ваш старый рисунок, но в обратном.
var data = ".xxx[val1, val2, val3, val4, val5]";
var pattern = @"
[^[]+ # Consume anything that is *not* a brace
# but don't match it , (.xxx is the first anchor)
\[ # Starting brace consumed
( # Start of match captures
(?<Token>[^\s,\]]+) # Named Match grouping called `Token` where one or more
# of anything not a space, comma or end brace is captured.
[\s,\]]+ # Consume the token's `,` or space or final bracket.
)+ # End match captures, one or more
] # Ending brace."
;
// IgnorePatternWhitespace allows us to comment the pattern,
// does not affect parser processing.
Regex.Match(data, pattern, RegexOptions.IgnorePatternWhitespace)
.Groups["Token"]
.Captures
.OfType<Capture>()
.Select(cp => cp.Value);
Результат
Если вы не можете определить шаблоны, то вы будете в затруднении, чтобы создать подходящий регулярное выражение, чтобы соответствовать им. Много земли покрывается «струна может варьироваться». – HABO
Ausgezeichnet вопрос фактически. Я переформулировал это для англоязычной аудитории, но мне было ясно, о чем вы спрашиваете. – OmegaMan
Спасибо большое :) –