.* , . , .* # 1 , .
var results = Regex.Matches(MyString, "##[^#]*#[^#]*##")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
regex
. ## # 1 char # ##, * ( 0+ ) + ( 1+ ).
2: ####..#....#####, : "(?<!#)##[^#]+#[^#]+##(?!#)"
:
## - 2 #[^#]*/[^#]+ - a , 0+ ( 1+ ), ## - #[^#]*/[^#]+ - 0+ ( 1+) , ### - #.
BONUS: ## ##, , (...) , , Match.Groups[1].Value s:
var results = Regex.Matches(MyString, @"##([^#]*#[^#]*)##")
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();