【问题标题】:Convert \n to <br /> but if it doesn't follow <h2> or [h2]将 \n 转换为 <br /> 但如果它不遵循 <h2> 或 [h2]
【发布时间】:2011-12-22 17:19:08
【问题描述】:

我想在字符串中用
替换 \n。但没那么简单。如果要替换的话,\n 之前不应该有 或 [/h2]。

例如,在本例中,在“Something”和“Another thing”之间放置一个

Something
Another thing

但是在这个例子中什么也不做:

<h2>Something</h2>
<p>Another thing</p>

我想出了(?&lt;!\]|\&gt;)\nthis .NET 正则表达式测试器上的工作。在第一个示例中找到了要替换的内容,但在第二个示例中没有如预期的那样。但是,我无法在我的 C# 代码中让这个不错的正则表达式像这样工作。以下代码替换所有\ns,无论它是否遵循&lt;/h2&gt;

Cevrilen = Regex.Replace(Cevrilen, @"(?<!\]|\>)\n", "<br />");

如果分隔符后面没有&lt;/h2&gt; 标签,我该如何替换它们?

【问题讨论】:

    标签: c# regex bbcode


    【解决方案1】:
    (?<!(?:<\/h2>|\[\/h2\]))\n
    

    应该这样做(使用否定的后视来取消&lt;/h2&gt;[/h2]\n 之前的资格)

    【讨论】:

    • 这也替换了\n,尽管它前面有一个&lt;/h2&gt;Cevrilen = Regex.Replace(Cevrilen, @"(?&lt;!(?:&lt;\/h2&gt;|\[\/h2\]))\n", "&lt;br /&gt;");
    • 我通过将(?&lt;!(?:&lt;\/h2&gt;|\[\/h2\]))\n 更改为(?&lt;!(?:&lt;\/h2&gt;|\[\/h2\]))\r\n 解决了这个问题。除了(?&lt;!\]|\&gt;)\r\n 也可以在添加\r 时工作。在&lt;/h2&gt;\n 之间存在\r
    • @sevenkul:您可能希望将其归类为[\r\n]+,以便匹配\n\r\n\n\r。但是,请记住,它也会将 \n\n 变成 single &lt;br /&gt;。或者,您可以使用 (\r?\n) 并匹配 \n\r\n 一次。
    【解决方案2】:

    如果您的 html 符合 xhtml,则将其加载为 System.Xml.Linq.XDocument 并且不要尝试使用 Regex 对其进行分析。正如一些人所说,“甚至 Chuck Norris 都做不到”。

    【讨论】:

    • 确实如此。 “小马托尼,他来了。”
    • 我正在从纯 txt 文件中读取字符串。问题中的示例中只有两行。
    • 那么,这个简单的操作是不是可以做?
    • 你可以用正则表达式试试运气,但是html有递归结构(标签可以嵌套),正则表达式无法应付。
    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 2012-07-21
    • 2011-09-25
    • 2019-07-13
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多