re.Compile的不平衡括号错误

时间:2013-05-28 19:48:19

标签: python regex python-3.x parentheses

我正在将旧的Python代码移植到Python 3.代码在Python 2.7中运行。以下行创建了一个不平衡的括号错误:

pp = re.compile('\\\([^\\<\/td\ *\>\([^\<]*)\<\/td\ *\>\[^\<]*\<\/td\ *\>\([^\<]*)\<\/td\ *\>\([^\<]*)\<\/td\ *\>\([^\<]*)\<\/td\ *\>\<\/tr\ *\>')

我不知道如何解决这个问题。任何建议都将非常感激如何打破这一点并弄明白。

1 个答案:

答案 0 :(得分:0)

你的表达几乎是不可读的,大多数\反斜杠实际上都没有意义。那些确实有意义的是\[\(\)组合,其中大多数看起来都不应该在那里

例如。部分\[^\<]已损坏,因为转义的\[会使]括号失衡。

删除所有反斜杠使模式编译:

>>> re.compile('([^</td *>([^<]*)</td *>[^<]*</td *>([^<]*)</td *>([^<]*)</td *>([^<]*)</td *></tr *>')
<_sre.SRE_Pattern object at 0x7f8c61c76d50>

在这种情况下,并不是说模式更有意义,因为在开始时有一个[^表示开放字符类,但是跟随它的字符表明那不是那里的意图, \[我们看到早期可能是该类的一部分然后你会匹配集合{'<', '/', 't', 'd', ' ', '*', '(', '[', '^', '<'}中没有的任何东西,这可能不是你想要的。

简而言之,整个表达式严重破坏,并且在任何Python版本中都不会以当前形式运行。

看起来你也试图用正则表达式解析HTML。这不会很好。例如,使用适当的HTML解析器,BeautifulSoup会使提取表格单元格数据的任务变得更加简单。