使用Python从第一个单元格HTML中删除文本



我有这个文件:

    <table>
    <tr>
    <td WIDTH="49%">
    <p><a href="...1.htm"> cell to remove</a></p></td>
    <td WIDTH="51%"> some text </td>
    </tr>

我需要以下内容:

    <table>
    <tr>
    <td> 
    </td>
    <td WIDTH="51%"> some text </td>
    </tr>

我试图用此HTML读取文件,然后用一个空的标签替换我的第一个标签:

   ret = open('rec1.txt').read()
   re.sub('<td[^/td>]+>','<td> </td>',ret, 1)
   final= open('rec2.txt', 'w')
   final.write(ret)
   final.close()

您可以看到,我是新来的使用Python和其他东西,当我阅读rec2.txt时,它包含了上一个文件的完全相同的文本。

tks

使用Regex对解析HTML是一种非常糟糕的做法(请参阅评论中的@lutz Horn的链接)。

改用HTML解析器。例如,这是您可以使用Beautifutsoup设置第一个td标签的值以空的方式:

美丽的汤是一个用于从HTML中抽出数据的Python库, XML文件。它与您喜欢的解析器一起使用以提供惯用性 导航,搜索和修改解析树的方式。它 通常节省程序员数小时或数天的工作。

from bs4 import BeautifulSoup

data = """
<table>
    <tr>
        <td WIDTH="49%">
            <p><a href="...1.htm"> cell to remove</a></p>
        </td>
        <td WIDTH="51%">
            some text
        </td>
    </tr>
</table>"""
soup = BeautifulSoup(data, 'html.parser')
cell = soup.table.tr.td
cell.string = ''
cell.attrs = {}
print soup.prettify(formatter='html')

打印:

<table>
 <tr>
  <td>
  </td>
  <td width="51%">
   some text
  </td>
 </tr>
</table>

另请参见:

  • 在Python中解析html
  • 使用Python解析HTML

希望会有所帮助。

使用Regex对html进行解析是非常糟糕的做法。如果您实际上是在尝试修改HTML,请使用HTML解析器。

如果问题是学术性的,或者您只是试图在问题中描述的有限转换,这是一个将来这样做的正则计划:

#!/usr/bin/python
import re
ret = open('rec1.txt').read()
ret = re.sub('<td.*?/td>','<td> </td>',ret, 1, re.DOTALL)
final= open('rec2.txt', 'w')
final.write(ret)
final.close()

注意:

  • 表达式[/td]表示/td的任何一个以任何顺序匹配。请注意,我如何使用.*匹配任意字符串,然后是/td
  • re.sub()的最终,可选的论点是一个标志参数。re.DOTALL允许.匹配新行。
  • ?意味着执行非怪兽搜索,因此它只会消耗一个单元格。
  • re.sub()返回结果字符串,它不会修改到适当的字符串。

最新更新