如何使用正则表达式删除 html 中的 font-family 属性?

Posted

技术标签:

【中文标题】如何使用正则表达式删除 html 中的 font-family 属性?【英文标题】:How to use Regex to remove font-family attribute in html? 【发布时间】:2015-12-02 14:56:50 【问题描述】:

我有以下 html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="utf-8" />
  <title></title>
</head>
<body>
  <p style="margin: 0in 0in 0pt; text-align: center;" class="ng-scope" align="center">
    <strong><span style='color: black; font-family: "Arial","sans-serif"; font-size: 18pt;'>Some Text</span></strong>
  </p>
  <p style="margin: 0in 0in 0pt;" class="ng-scope"><span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Some Text.</span></p>
  <div class="ng-scope">&nbsp;</div>
  <p style="margin: 0in 0in 0pt;" class="ng-scope"><span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Some Text.</span></p>
  <div class="ng-scope">&nbsp;</div>
  <p style="margin: 0in 0in 0pt;" class="ng-scope"><span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Some Text. </span></p>
  <div class="ng-scope">&nbsp;</div>
  <p style="margin: 0in 0in 0pt;" class="ng-scope">
    <span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Also over</span>
    <span style='color: black; font-family: "Cambria Math","serif"; font-size: 12pt;'>‐</span>
    <span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>the</span>
    <span style='color: black; font-family: "Cambria Math","serif"; font-size: 12pt;'>‐</span>
    <span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Some Text.</span>
  </p>
  <div class="ng-scope">&nbsp;</div>
  <p style="margin: 0in 0in 0pt;" class="ng-scope">
    <span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Some Text </span>
    <span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Some Text.</span>
  </p>
  <div class="ng-scope">&nbsp;</div>
  <p style="margin: 0in 0in 0pt;" class="ng-scope">&nbsp;</p>
  <div class="ng-scope">
    <span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>
      <div class="row">
        <div class="panel panel-primary col-sm-12 col-xs-24 col-md-8"><img class="img-responsive" src="data:image/png;base64,iVBORw0KGgGSE5XUSzMPLwAAAABJRU5ErkJggg=="></div>
      </div>
    </span>
  </div>
  <div class="ng-scope">&nbsp;</div>
  <p style="margin: 0in 0in 0pt;" class="ng-scope"><span style='color: black; font-family: "Arial","sans-serif"; font-size: 12pt;'>Signature of Patient or Legal Guardian</span> </p>
     </body>
</html>

所以,只要有 font-family 属性,我只需要删除它们和相应的属性即可。 所以,基本上,它应该从 font-family 到下一个分号 (;) 删除。在 C#/VB 中使用 RegEx 即可。

提前致谢。

【问题讨论】:

【参考方案1】:

我觉得这里最好用HtmlAgilityPack,因为可能在html中有这样的文字,而不是在style,如果事实上html只是喜欢你的demo,你也可以用下面的Regex替换

font-family:[^;']*(;)?

这个patten也可以匹配不以;结尾的样式,就像style='font-family: "Arial","sans-serif"'一样

【讨论】:

【参考方案2】:

鉴于您的 html 在 string-variable htmlWithFont 中,您可以这样做:

var htmkWithoutFont = Regex.Replace(htmlWithFont, "font-family:\\s*\".*\";?", string.Empty);

【讨论】:

【参考方案3】:

另一个匹配 font-family 而不是 mso-bidi-font-family 的正则表达式:

(?<=;|"|\s)font-family:[^;']*(;)?

如果font-family 是第一个样式属性,或者前面有; 或空格,则此模式仅匹配font-family

【讨论】:

以上是关于如何使用正则表达式删除 html 中的 font-family 属性?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式删除 HTML-head-tag

如何使用正则表达式 html 将空白行删除为纯文本?

如何使用正则表达式删除字符串中的括号符号

删除正则表达式中的 Html 标签 [重复]

正则表达式替换 HTML 文档中的空格

如何使用正则表达式语法从给定列中的文本中删除“省略号”? [复制]