Это довольно стандартно для "-?
" означать "соответствовать символу" -
"ноль или один раз".
$ perl -E'
say "$_: ", /^aaa-?bbb\z/ ? "match" : "no match"
for qw( aaabbb aaa-bbb aaa--bbb );
'
aaabbb: match
aaa-bbb: match
aaa--bbb: no match
Я был бы очень удивлен, если бы это не сработалотак же в C #.