Regex re.sub don';不能代替火柴
我有一个html文件,其中有些部分需要删除。 除一个部分外,所有部分都将被删除。我可以给你一个小例子,但是一个正则表达式编辑器识别出这个部分是非常奇怪的 我想删除Regex re.sub don';不能代替火柴,regex,python-3.x,Regex,Python 3.x,我有一个html文件,其中有些部分需要删除。 除一个部分外,所有部分都将被删除。我可以给你一个小例子,但是一个正则表达式编辑器识别出这个部分是非常奇怪的 我想删除之间的所有内容,但它不起作用 test = '<br/><br/> </span> <!--TABLE<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 style=\'border-collapse:c
之间的所有内容,但它不起作用
test = '<br/><br/> </span> <!--TABLE<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 style=\'border-collapse:collapse;border:none\'> <tr style=\'height:12.95pt\'> <td width=225 valign=top style=\'width:109.45pt;border:solid windowtext 1.0pt;padding:2.4pt 5.4pt 2.4pt 5.4pt;height:12.95pt\'> <span style=\'font-family:"Arial",sans-serif\'> <b>Kontosaldo in \x80</b> </span> </td> </tr> <tr style=\'height:12.95pt\'> <td width=146 valign=top style=\'width:109.45pt;border:solid windowtext 1.0pt;padding:2.4pt 5.4pt 2.4pt 5.4pt;height:12.95pt\'> <span style=\'font-family:"Arial",sans-serif\'> [substringR] </span> </td> </tr> </table>TABLE-->'
r = re.compile(r"(?<=<!--)([\s\n.<>\]\[\\=;,€\/\-\'\":\w\n]+)(?=-->)")
mystring = r.sub('', test)
test='
r=重新编译(r“(?)”)
mystring=r.sub(“”,测试)
“介于
之间的所有内容”是以下表达式:
<!--.*?-->
替换为空字符串。使用
注意用正则表达式修改HTML会带来灾难。不要这样做。这个特殊的任务,即“删除注释”是一个灰色区域:正则表达式不能处理可以任意嵌套的语言(如HTML),但HTML注释不能嵌套,因此很有可能这样做。但是,不要尝试“替换所有表”的相同方法,它不会起作用
但是,HTML仍然可以发挥作用,而且在很多方面仍然存在可怕的破坏,即使是在执行此任务时,也会出现HTML文件,当您在这些文件上尝试这个看似安全的正则表达式时,它们会完全分解
正确的方法正如@Aaron所建议的:将HTML文件解析为DOM树。查找要删除的节点。将DOM树写回文件;如本答案所示:.与问题没有直接关系,但我将不再使用BeautifulSoap而不是使正则表达式复杂化。。类似于这里:BeautifulSoap对我来说是一个新的@Aaron_ab!这是多么简单,令人恐惧。难怪它对我不起作用。但请注意我的警告——这种简单性是不可靠的。不要试图用正则表达式执行比这更复杂的任务。即使“修改此属性值”是一项需要HTML解析器的任务,我也不会讨论诸如“添加表行”之类的结构修改。