How can I replace lone instances of \n with \r\n (LF alone with CRLF) using a regular expression in C#?
I know to do it using plan String.Replace, like:
myStr.Replace("\n", "\r\n"); myStr.Replace("\r\r\n", "\r\n");
However, this is inelegant, and would destroy any "\r+\r\n" already in the text (although they are not likely to exist).
Will this do?
Basically it matches a ‘\n’ that is preceded with a character that is not ‘\r’.
If you want it to detect lines that start with just a single ‘\n’ as well, then try
Which says that it should match a ‘\n’ but only those that is the first character of a line or those that are not preceded with ‘\r’
There might be special cases to check since you’re messing with the definition of lines itself the ‘$’ might not work too well. But I think you should get the idea.
EDIT: credit @Kibbee Using look-ahead s is clearly better since it won’t capture the matched preceding character and should help with any edge cases as well. So here’s a better regex + the code becomes: