Вы должны добавить круглые скобки к классу символов [\w\-.,@?^=%&:/~+#()]
Если вы не используете группы захвата, я думаю, вы могли бы сделать свое регулярное выражение немного более компактным, используя одну группу захвата для замены,
Обратите внимание, что вам не нужно экранировать точку и знак плюс внутри класса символов.
((?:https?|ftp):\/\/[\w\-_]+(?:\.[\w\-_]+)+(?:[\w\-.,@?^=%&:/~+#()]*[\w\-@?^=%&/~+#])?)
Regex demo | Демонстрация C #