【问题标题】:Maximum of two line breaks最多两个换行符
【发布时间】:2011-08-08 04:29:13
【问题描述】:

我有正则表达式:

Comment = Comment.Replace("\n", "<br />");    

运行后,我只希望最多有两次休息。例如,3 个或更多 &lt;br /&gt; 将复合成 &lt;br /&gt;&lt;br /&gt;。这将阻止人们留下巨大的空白。

谁能告诉我这是怎么做到的?

测试用例

Hello


This is my
Test





Peanut

Case

这应该变成:

Hello<br /><br />This is my<br />Test<br /><br />Peanut<br /><br />Case

如果&lt;br /&gt; 标签之间有任意数量的&amp;nbsp;,它也应该工作

【问题讨论】:

  • 您在寻找\n 还是&lt;br /&gt;
  • 要么!我已经替换为&lt;br /&gt;,所以匹配这些可能最有意义

标签: c# asp.net html regex


【解决方案1】:

当两个或多个&lt;br /&gt; 仅由空格分隔时,使用以下正则表达式匹配:

(<br />\s<br />\s*)(<br />\s*)*

我会把替换的语法留给你。

【讨论】:

  • +1 但您的答案需要编辑以摆脱&amp;lt;。另外你需要提到匹配需要替换为&lt;br /&gt;&lt;br /&gt;
【解决方案2】:

首先检查并用"&lt;br /&gt;&lt;br /&gt;" 替换连续3 个或更多换行符的实例。然后进行第二次传递并将所有剩余的新行替换为"&lt;br /&gt;"

下面是一个快速的控制台应用程序来演示。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string content = "Hello\r\n\r\n\r\nThis is my\r\nTest\r\n\r\n\r\n\r\n\r\n\r\nPeanut\r\n\r\nCase\r\n\r\n\r\n\r\n\r\n";

            Console.WriteLine("Here is the unmodified string:");
            Console.WriteLine();
            Console.WriteLine(content);

            content = Regex.Replace(content, @"(\r\n){2,}", "<br /><br />");
            content = Regex.Replace(content, @"\r\n", "<br />");

            Console.WriteLine("Here is the modified string:");
            Console.WriteLine();
            Console.WriteLine(content);

            Console.ReadLine();
        }
    }
}

享受吧!

【讨论】:

  • 这是最好的,但它甚至可以简化。 Comment.Replace("\\n{2,}", "&lt;br/&gt;&lt;br/&gt;"); Comment.Replace("\\n", "&lt;br/&gt;"); 我试图用一个函数调用来做到这一点,但不幸的是,我不再擅长使用 RegEx。
  • @pickypg - 同意您的更改使这更易于阅读。我已经更新了上面的代码 - 感谢您的宝贵意见。
  • 这似乎比预期的要替换很多!
  • 啊,我应该更好地表达我的问题,应该是,2 个连续的 &lt;br /&gt; 不是字符串中的 2 个
  • @Tom - 您好 Tom,我使用快速控制台应用程序更新了我的解决方案,以便您了解该解决方案的工作原理。
【解决方案3】:

我不知道 C# 正则表达式的风格,但这可能有效:

regex : /(\n\n?)\n*/

replace : $1 or \1

【讨论】:

    【解决方案4】:

    这个怎么样?

      Regex regex = new Regex( "((<br\ />(\s*)){3,})" );
      string result = regex.Replace( commentText, "" );
    

    【讨论】:

    • 我以前犯过这个错误。您将替换任何超过两个的出现,没有。您需要将 String.Empty 替换为两个“
      ”。
    • 这只会替换 3 个或更多换行符的实例 - 您仍然需要另一个正则表达式来获取
    • @Mark 哎呀!完全正确。 @Doug 这不是目标吗?我以为他想留下 1 或 2 个换行符,但将 3 个或更多替换为两个。
    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 2021-02-12
    • 2021-03-24
    • 2016-07-02
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多