Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex re.sub don';不能代替火柴_Regex_Python 3.x - Fatal编程技术网

Regex re.sub don';不能代替火柴

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

我有一个html文件,其中有些部分需要删除。 除一个部分外,所有部分都将被删除。我可以给你一个小例子,但是一个正则表达式编辑器识别出这个部分是非常奇怪的

我想删除
之间的所有内容,但它不起作用

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解析器的任务,我也不会讨论诸如“添加表行”之类的结构修改。