python - 使用 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。
解决方案
您可以通过以下方式使用正则表达式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>
推荐阅读
- reactjs - 嵌入式反应路由器不显示组件
- r - 如何使用 shinyjs 将 graphviz 节点数据链接到 Shiny UI htmlOutput?
- javascript - localStorage onclick 添加/删除类
- reactjs - 无法在 reactjs 中设置图像路径
- python-3.x - 无法在 PYCHARM ANACONDA 中安装 numpy
- c++ - 转换非常长的 C++ 字符串文字以满足最大行长策略
- css - Angular Material 触摸屏滚动问题
- android - 如何通过带有标头的 volley 发布 JSON 请求?
- jsf - 刷新 JSF 中的 UI 组件
- elasticsearch - 需要帮助将 ElasticSearch 过滤器布尔查询从 1.7 转换为 6.7