Ваше регулярное выражение не соответствует последнему значению, потому что вашему регулярному выражению (с положительным прогнозом (?=#)
) требуется, чтобы #
появилось после уже использованного значения, а в конце строки нет #
.
Вы можете использовать
#[^#]+
См. Демоверсию regex
Класс отрицательных символов [^#]
соответствует любому символу, кроме #
(+
означает 1 или более вхождений ) и не требует, чтобы #
появлялся сразу справа от текущего совпадающее значение.
В C # вы можете собрать все совпадения, используя
var result = Regex.Matches(s, @"#[^#]+")
.Cast<Match>()
.Select(x => x.Value)
.ToList();
Более точный шаблон, который вы можете использовать - #[A-Fa-f0-9]{8}
, он соответствует #
, а затем любым 8 шестнадцатеричным символам, цифрам или буквам от a
до f
и A
до F
.