【发布时间】:2018-11-07 22:56:19
【问题描述】:
对于使用 Python 将 html 格式的文件转换为纯文本文件,如果表格中的文本包含超过 40% 的数字字符,我需要删除所有表格。
具体来说,我想:
- 标识 html 文件中的每个表格元素
- 计算文本中数字和字母字符的数量以及对应的比例,不考虑任何html标签中的字符。因此,删除所有 html 标签。
- 如果表格的文本由超过 40% 的数字字符组成,则删除表格。如果表格包含少于 40% 的数字字符,请保留表格。
我定义了一个在运行 re.sub 命令时调用的函数。 rawtext 变量包含我要解析的整个 html 格式的文本。在函数中,我尝试处理上述步骤,并根据数字字符的比例返回表格的 html 剥离版本或空格。但是,函数中的 first re.sub 命令似乎不仅删除了标签,还删除了所有内容,包括文本内容。
def tablereplace(table):
table = re.sub('<[^>]*>', ' ', str(table))
numeric = sum(c.isdigit() for c in table)
alphabetic = sum(c.isalpha() for c in table)
try:
ratio = numeric / (numeric + alphabetic)
print('ratio = ' + ratio)
except ZeroDivisionError as err:
ratio = 1
if ratio > 0.4:
emptystring = re.sub('.*?', ' ', table, flags=re.DOTALL)
return emptystring
else:
return table
rawtext = re.sub('<table.+?<\/table>', tablereplace, rawtext, flags=re.IGNORECASE|re.DOTALL)
如果您知道此代码可能有什么问题,如果您与我分享,我将非常高兴。谢谢!
【问题讨论】:
-
不要使用正则表达式来解析 HTML,而是使用为此目的而制作的工具。见这里stackoverflow.com/questions/11709079/parsing-html-using-python
-
请参阅this legendary answer,了解如何使用正则表达式解析 HTML(剧透警告:您不知道,但这篇文章非常史诗)。