我正在将旧的Python代码移植到Python 3.代码在Python 2.7中运行。以下行创建了一个不平衡的括号错误:
pp = re.compile('\\\([^\\<\/td\ *\>\([^\<]*)\<\/td\ *\>\[^\<]*\<\/td\ *\>\([^\<]*)\<\/td\ *\>\([^\<]*)\<\/td\ *\>\([^\<]*)\<\/td\ *\>\<\/tr\ *\>')
我不知道如何解决这个问题。任何建议都将非常感激如何打破这一点并弄明白。
答案 0 :(得分:0)
你的表达几乎是不可读的,大多数\
反斜杠实际上都没有意义。那些确实有意义的是\[
,\(
和\)
组合,其中大多数看起来都不应该在那里 。
例如。部分\[^\<]
已损坏,因为转义的\[
会使]
括号失衡。
删除所有反斜杠使模式编译:
>>> re.compile('([^</td *>([^<]*)</td *>[^<]*</td *>([^<]*)</td *>([^<]*)</td *>([^<]*)</td *></tr *>')
<_sre.SRE_Pattern object at 0x7f8c61c76d50>
在这种情况下,并不是说模式更有意义,因为在开始时有一个[^
表示开放字符类,但是跟随它的字符表明那不是那里的意图, \[
我们看到早期可能是该类的一部分然后你会匹配集合{'<', '/', 't', 'd', ' ', '*', '(', '[', '^', '<'}
中没有的任何东西,这可能不是你想要的。
简而言之,整个表达式严重破坏,并且在任何Python版本中都不会以当前形式运行。
看起来你也试图用正则表达式解析HTML。这不会很好。例如,使用适当的HTML解析器,BeautifulSoup会使提取表格单元格数据的任务变得更加简单。