Regex that matches a newline (\n) in C#

Viewed 95578

OK, this one is driving me nuts.... I have a string that is formed thus:

var newContent = string.Format("({0})\n{1}", stripped_content, reply)

newContent will display like:
(old text)
new text

I need a regular expression that strips away the text between parentheses with the parenthesis included AND the newline character.

The best I can come up with is:

const string  regex = @"^(\(.*\)\s)?(?<capture>.*)";
var match= Regex.Match(original_content, regex);
var stripped_content = match.Groups["capture"].Value;

This works, but I want specifically to match the newline (\n), not any whitespace (\s) Replacing \s with \n \\n or \\\n does NOT work.

Please help me hold on to my sanity!

EDIT: an example:

public string Reply(string old,string neww)
        {
            const string  regex = @"^(\(.*\)\s)?(?<capture>.*)";
            var match= Regex.Match(old, regex);
            var stripped_content = match.Groups["capture"].Value;
            var result= string.Format("({0})\n{1}", stripped_content, neww);
            return result;
        }

Reply("(messageOne)\nmessageTwo","messageThree") returns :
(messageTwo)
messageThree
5 Answers

If you specify RegexOptions.Multiline then you can use ^ and $ to match the start and end of a line, respectively.

If you don't wish to use this option, remember that a new line may be any one of the following: \n, \r, \r\n, so instead of looking only for \n, you should perhaps use something like: [\n\r]+, or more exactly: (\n|\r|\r\n).

Actually it works but with opposite option i.e.

 RegexOptions.Singleline

You are probably going to have a \r before your \n. Try replacing the \s with (\r\n).

Counter-intuitive as it is, you can use both Multiline and Singleline option.

Regex.Match(input, @"(.+)^(.*)", RegexOptions.Multiline | RegexOptions.Singleline)

First capturing group will contain first line (including \r and \n) and second group will have second line.

Why:

First of all RegexOptions enum is flag so it can be combined with bitwise operators, then

  • Multiline:

^ and $ match the beginning and end of each line (instead of the beginning and end of the input string).

  • Singleline:

The period (.) matches every character (instead of every character except \n)

see docs

Related