在C#中匹配换行符(\n)的正则表达式

Dab*_*rnl 33 .net c# regex

好吧,这个让我疯了......我有一个字符串,这样就形成了:

var newContent = string.Format("({0})\n{1}", stripped_content, reply)
Run Code Online (Sandbox Code Playgroud)

newContent将显示如下:(
旧文本)
新文本

我需要一个正则表达式,用括号括起来的括号中的文本和换行符.

我能想到的最好的是:

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

这工作,但我想专门匹配换行符(\n),没有任何空格(\s)替换\s\n \\n\\\n无法正常工作.

请帮我保持理智!

编辑:一个例子:

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
Run Code Online (Sandbox Code Playgroud)

Jon*_*ant 67

如果指定RegexOptions.Multiline,则可以分别使用^$匹配行的开头和结尾.

如果你不希望使用此选项,请记住,一个新行可能是以下中的任何一个:\n,\r,\r\n,所以不是寻找只为\n,你或许应该使用这样的:[\n\r]+,或者更确切地说:(\n|\r|\r\n).

  • 不要忘记交替并不贪心; 如果你将你的正则表达式应用于`"\ r \n"`它只会匹配`"\ r"`.我会使用`(\n |\r \n?)`或者`(\ r \n?| \n)`来代替. (23认同)

Sau*_*ius 20

实际上它有效,但有相反的选择即

 RegexOptions.Singleline
Run Code Online (Sandbox Code Playgroud)

:-)

  • 好的!为我修好了!不知何故,使用多行选项不会忽略行尾。但是用单行做到了!+1 (2认同)

JP *_*oto 5

你的\n之前可能会有一个\r。尝试用 (\r\n) 替换 \s。