string s = "[123,234,345,456,567,678,789,890,100]";
MatchCollection matches = Regex.Matches(s, @"(\d+)[,\]]");
string[] result = matches.OfType<Match>().Select(m => m.Groups[1].Value).ToArray();
Здесь @
используется для обозначения дословных строкового литерала и позволяет экранирующий символ «\», которые будут использоваться непосредственно в регулярном выражении нотации, не спасаясь себя «\».
\d
- это цифра, \d+
означает 1 или более цифр. Скобки означают группу, поэтому (\d+)
означает, что я хочу группу цифр. (* См группа использовала чуть позже)
[,\]]
квадратные скобки, короче говоря, означает выбрать любой из моего элемента так будет выбрать либо запятая ,
или квадратные скобки ]
, которые я должен был бежать.
Таким образом, регулярное выражение найдет выражения последовательных цифр, а затем ,
или ]
. Матчи возвращают набор совпадений (которые мы используем, потому что есть несколько наборов), тогда мы проходим через каждое соответствие - с некоторым LINQ - и захватываем группу индекса 1, которая является второй группой, «но мы сделали только одну группу?» Мы указали только одну группу, первая группа (индекс 0) - это полное соответствие регулярного выражения, которое в нашем случае будет содержать ,
или ]
, которые мы не хотим.
Что не так с кодом? –
Да, вы можете. Тем не менее, я бы просто хотел сказать, что это именно то, как я его кодировал, ваше решение прекрасно, и я предпочел бы его подход RegExp –