Хотя это старый вопрос и на него уже дан ответ, я подумал, что добавлю это в качестве дополнения для всех, кто придет. Существующие два ответа делают всю настоящую работу и дают мне 90%, но вот последний момент для тех, кто ищет код, чтобы продолжить попытки:
string html = "Some text with a wiki style [[page2.html|link]]";
html = Regex.Replace(html, @"\[\[([^\]\|\r\n]+?)\|([^\]\|\r\n]+?)\]\]([^\] ]\S*)", @"<a href=""$1"">$2$3</a>");
html = Regex.Replace(html, @"\[\[([^\]\|\r\n]+?)\]\]([^\] ]\S*)", @"<a href=""$1"">$1$2</a>");
Единственное изменение в действительном регулярном выражении состоит в том, что я думаю, что в исходном ответе запасные части были неправильными, поэтому href был установлен для отображаемого текста, а ссылка была показана на странице. Поэтому я поменял их местами.