regex 如何在C#中用正则表达式替换两个HTML标记之间的所有换行符

5lhxktic  于 2022-11-18  发布在  C#
关注(0)|答案(1)|浏览(160)

我有一个html代码结构如下:

<html>
   <body>
      ...
      <p class="class1">
       Text
       Some more text
       Even more text
      </p>
      ...
      <p class="class2">
       Bla
       Bla
       Read more at
      <a href="..." >Link</a>
      </p>
</html>

在C#中,如何将<p>标记之间的所有换行符替换为<br />?所有其他标记都不应匹配。
这是我目前使用的正则表达式。但是它并没有像我期望的那样工作。
/(?<=<p).*(\n).*(?=<\/p>)/gs

cnwbcb6i

cnwbcb6i1#

问题是在两个文本之间删除某个文本可以通过C#中的正则表达式解决,方法如下:

var start = @"<p[\s>]";
var end = @"</p>";
var pattern = $@"(?s){start}.*?{end}";
var result = Regex.Replace(text, pattern, m => 
    m.Value.Replace("\n", "<br />"));

这里,(?s)<p[\s>].*?</p>将查找<p(后面跟有空格或>)和</p>之间的所有子字符串,然后m => m.Value.Replace("\n", "<br />")将在匹配值中用<br />替换LF符号。
如果可以混合使用换行符,则需要使用另一个Regex.Replace调用,并将m.Value.Replace("\n", "<br />")替换为

Regex.Replace(m.Value, "\r\n?|\n", "<br />")

或者,如果您计划将连续的分行符号缩小为单一<br />

Regex.Replace(m.Value, "(?:\r\n?|\n)+", "<br />")

相关问题