alexx11Вас, вероятно, сбило с толку слово ‘необязательные’. В данном контексте это означает только то, что их может не быть в строке, а вовсе не то, что они не нужны. Посмотрите хотя бы на код.
val1, val2 - ТС сказал вроде не надо ему.
PS: Если вы правы и val1, val2 не нужны, то re уже будет из пушки по воробьям. Обычный s.split('#') вернет name для первого случая и s.split('#') для второго.