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

时间:2009-07-23 23:30:58

标签: c# .net regex

好的,这个让我疯了...... 我有一个由此形成的字符串:

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

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

我需要一个正则表达式,用括号中的括号和换行符来删除括号内的文本。

我能想到的最好的是:

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

这有效,但我想要专门匹配换行符(\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

6 个答案:

答案 0 :(得分:58)

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

如果您不想使用此选项,请记住新行可以是以下任意一项:\n\r\r\n,因此不要只查看对于\n,您应该使用类似:[\n\r]+的内容,或更确切地说:(\n|\r|\r\n)

答案 1 :(得分:17)

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

 RegexOptions.Singleline

答案 2 :(得分:4)

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

答案 3 :(得分:3)

如果您正在尝试匹配行结尾,那么您可能会找到

Regex.Match("string", "regex", RegexOptions.Multiline)

帮助

答案 4 :(得分:3)

想想我可能有点迟到了,但仍然希望这会有所帮助。

我需要在两个哈希符号之间获得多个令牌。

示例i / p:

## token1 ##
## token2 ##
## token3_a
token3_b
token3_c ##

这似乎适用于我的情况:

var matches = Regex.Matches (mytext, "##(.*?)##", RegexOptions.Singleline);

当然,您可能希望用自己的字符替换两端的双重哈希符号。

HTH。

答案 5 :(得分:1)

实际上是反直观的,您可以同时使用MultilineSingleline选项。

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

第一个捕获组将包含第一行(包括\r\n),第二个捕获组将具有第二行。

为什么:

  • Multiline

      

    ^$匹配每行的开头和结尾(而不是输入字符串的开头和结尾)。

  • Singleline

      

    句点(.)匹配每个字符(而不是\n之外的每个字符)

    see docs