什么正则表达式可以从BR标签中删除所有属性?

3

以下是需要替换的文本,使用哪个C#正则表达式可以替换所有这些内容:

<BR style=color:#93c47d>
<BR style=color:#fefefe>
<BR style="color:#93c47d">
<BR style="color:#93c47d ...">
<BR>
<BR/>
<br style=color:#93c47d>
<br style=color:#fefefe>
<br style="color:#93c47d">
<br style="color:#93c47d ...">
<br>
<br/>

使用:

<br/>

基本上是“从任何BR元素中删除所有属性并将其转换为小写”。

https://dev59.com/X3I-5IYBdhLWcg3wq6do#1732454 - thecoop
@thecoop:这仅适用于实际解析HTML,而此问题并不需要。在这种情况下,唯一可能破坏正则表达式的是如果属性内有“>”,但我认为这是无效的。 - Michael Myers
谁是想出那个HTML的人?无法想象一个使用案例。 - Dykam
@Dykam 信不信由你,这是从已发布的Google文档生成的HTML,连同FONT标签。 - Edward Tanguay
是的,我认为谷歌文档必须有一个规范,使其HTML输出与Mosaic 1.0兼容,这让我想起了1993年的HTML,即FONT标签,没有属性引号。 - Edward Tanguay
2个回答

8

类似这样的:

Regex.Replace(myString, "<br[^>]*>", "<br/>", RegexOptions.IgnoreCase);

或者不使用 IgnoreCase

Regex.Replace(myString, "<[Bb][Rr][^>]*>", "<br/>");

0

假设您在style之后从未有过任何属性,我会猜测类似于以下代码:

class Program
{
  const string SOURCE = @"<BR style=color:#93c47d>
<BR style=color:#fefefe>
<BR style=""color:#93c47d"">
<BR style='color:#93c47d'>
<BR>
<BR/>
<br style=color:#93c47d>
<br style=color:#fefefe>
<br style=""color:#93c47d"">
<br style='color:#93c47d'>
<br>
<br/>";

  static void Main(string[] args)
  {
    const string EXPRESSION = @"(style=[^""'][^>]*)|(style=""[^""]*"")|(style='[^']*')";

    var regex = new Regex(EXPRESSION);

    Console.WriteLine(regex.Replace(SOURCE, string.Empty));
  }
}

如果在样式属性之后的标签中有写入属性,那么使用编程解决方案可能会更好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接