Будет ли это делать?
[^\r]\n
В основном это соответствует '\ n', которому предшествует символ, который не является '\ r'.
Если вы хотите, чтобы он также обнаруживал строки, начинающиеся с единственного '\ n', попробуйте
([^\r]|$)\n
Что говорит о том, что оно должно соответствовать '\ n', но только те, которые являются первым символом строки или те, которые не предшествуют '\ r'
Могут быть особые случаи, чтобы проверить, так как вы возитесь с определением самих строк, '$' может работать не слишком хорошо. Но я думаю, вы должны понять.
РЕДАКТИРОВАТЬ: credit @Kibbee Использование упреждающего просмотра явно лучше, поскольку оно не захватывает совпадающий предшествующий символ и должно помочь в любых крайних случаях. Итак, вот лучшее регулярное выражение + код становится:
myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");