首页 > 解决方案 > 使用 Python 选择和重新排列 HTML 元素

问题描述

如何在不使用任何库的情况下对以下非结构化表格元素进行结构化。

<table>
 <tfoot>
    <tr><td>Sum</td><td>$180</td></tr>
  </tfoot>
  <tbody>
    <tr><td>January</td><td>$100</td></tr>
  </tbody>
</table>

所需表:

<table>
  <tbody>
    <tr><td>January</td><td>$100</td></tr>
  </tbody>
   <tfoot>
    <tr><td>Sum</td><td>$180</td></tr>
  </tfoot>
</table>

保持html元素的属性顺序很重要。我尝试过使用 Beautifulsoup。它改变了顺序。请提出任何解决此问题的pythonic方法,不需要使用beautifulsoup或lxml。

标签: pythonhtml

解决方案


您可以通过以下方式使用正则表达式re

import re
s = """
<table>
  <tfoot>
    <tr><td>Sum</td><td>$180</td></tr>
  </tfoot>
  <tbody>
    <tr><td>January</td><td>$100</td></tr>
 </tbody>
</table>
"""
new_s = re.sub('\<tfoot\>[\w\W]+\</tfoot\>|\<tbody\>[\w\W]+\</tbody\>', '{}', s).format(*re.findall('\<tfoot\>[\w\W]+\</tfoot\>|\<tbody\>[\w\W]+\</tbody\>', s)[::-1])

输出:

<table>
  <tbody>
     <tr><td>January</td><td>$100</td></tr>
  </tbody>
  <tfoot>
     <tr><td>Sum</td><td>$180</td></tr>
  </tfoot>
</table>

推荐阅读