正则表达式删除HTML中的<font>标签

时间:2015-12-16 18:17:53

标签: html regex notepad++

我试图找到一个正则表达式(使用记事本++),这使我能够删除每个单词上的多余<font>元素,以便整理它。

我有以下代码:

<font face="Arial" size="12">A </font>
<font face="Arial" size="12">
 </font>
<font face="Arial" size="12">guy </font>
<font face="Arial" size="12">
 </font>
<font face="Arial" size="12">went </font>
<font face="Arial" size="12">
 </font>
<font face="Arial" size="12">to </font>
<font face="Arial" size="12">
 </font>
<font face="Arial" size="12">get </font>
<font face="Arial" size="12">
 </font>
<font face="Arial" size="12">H </font>
<font face="Arial" size="12">
 </font>
                <font face="Arial" size="12">
    <sub>2</sub>
 </font>
 <font face="Arial" size="12">0</font>
<font face="Arial" size="12">. </font>
<font face="Arial" size="12">
 </font>

我的预期输出是:

<font face="Arial" size="12">A guy went to get H<sub>2</sub>0.</font>
  • 字体的面貌和大小将始终相同。
  • 我不想消除其他元素,例如&lt; sup&gt;
  • 我需要删除换行符和制表符,但不要删除空格
  • 我不想取消第一次开幕和最后一次结束

到目前为止,我所做的并不能让我达到上述三点,因为我怀疑我是从错误的方向接近问题。

查找: (<font[^>]+>)(.*?)<\/font>[\s]?
替换: $2

1 个答案:

答案 0 :(得分:1)

如果NP ++支持\K\G以及(?|..)结构(PCRE兼容), 这适用于您的示例文本。

请注意,修剪是一般化的,但您可能需要将其修改为
满足您的需求。

查找(?s)(?:(?!\A)\G|<font\s+face="Arial"\s+size="12">\K)(?|\s+()|(?:\s*\r?\n\s*)?(.*?)(?:\s*\r?\n\s*)?)</font>.*?<font\s+face="Arial"\s+size="12">
替换$1

格式化

 (?s)
 (?:
      (?! \A )
      \G 
   |  
      <font \s+ face="Arial" \s+ size="12">
      \K 
 )
 (?|
      \s+ 
      ( )                           # (1)
   |  
      (?: \s* \r? \n \s* )?
      ( .*? )                       # (1)
      (?: \s* \r? \n \s* )?
 )
 </font>
 .*? 
 <font \s+ face="Arial" \s+ size="12">

替换所有

后的输出
<font face="Arial" size="12">A guy went to get H <sub>2</sub>0. 
</font>  

使用RegexFormat 7

进行测试