【问题标题】:remove html line break between <li> tags with php (or python)使用 php(或 python)删除 <li> 标记之间的 html 换行符
【发布时间】:2012-12-19 08:45:44
【问题描述】:

我有大量的 html 文本数据集,我经常发现 &lt;li&gt; 标记中的 &lt;br&gt; 换行符是不必要的,有时甚至是多个。

例如:

<li>Some string here<br></li><br><li>Another string here<br><br></li><br>

我想删除出现在&lt;li&gt;&lt;/li&gt; 之间的这些&lt;br&gt;,但保留其他所有内容,包括&lt;br&gt; 之外的&lt;li&gt; 标记。上面的文字会变成:

<li>Some string here</li><br><li>Another string here</li><br>

用 php 中的 preg_replace() (或 python 中的 re.sub() )执行此操作的正则表达式是什么?

【问题讨论】:

  • “什么是正则表达式?”你要付给我多少钱?
  • 你是用PHP把内容放到li标签里的吗?
  • @AaronMiller 不,只是试图从原始文本中删除。我没有插入任何东西。
  • 你确实使用正则表达式来破坏 html。你使用 DOM。
  • 我建议您使用HTML 解析器在&lt;li&gt; 标签中查找前导和尾随&lt;br&gt;s。此处建议的正则表达式可能适用于您的示例,但请注意 HTML 不是正则语言,通常无法使用正则表达式解析!

标签: php python regex html-parsing


【解决方案1】:

&lt;/li&gt; 替换(&lt;br&gt;)+&lt;/li&gt; 至少会处理li 内容末尾的换行符,这对您来说可能已经足够了。否则,由于&lt;li&gt;s 有时包含其他&lt;li&gt;s,您面前可能有一个非常困难的任务,无法用正则表达式轻松解决(并且可能根本无法单独使用正则表达式解决),请参阅接受的答案到this question

【讨论】:

    【解决方案2】:

    使用PHP Simple HTML DOM Parser 可以轻松实现(就像 jQuery 一样)

    include('simple_html_dom.php');
    $html = str_get_html('<li>Some string here<br></li><br><li>Another string here<br><br></li><br>');
    foreach($html->find('li br') as $br){
        $br->outertext='';
    }
    echo $html;
    

    输出将是

    <li>Some string here</li><br>
    <li>Another string here</li><br>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2017-07-06
      • 2010-11-08
      • 2010-12-21
      • 2020-11-06
      相关资源
      最近更新 更多