使用re.Compile时出现圆括号不平衡错误



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

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

我不知道如何解决这个问题。如果有什么建议,我将不胜感激。

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

例如

。部分[^<]是坏的,因为转义的[使]括号不平衡。

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

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

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

简而言之,整个表达式被严重破坏了,在任何Python版本中都不能以当前形式工作。

看起来也像你试图用正则表达式解析HTML。这不会很有效的。使用合适的HTML解析器,例如BeautifulSoup将使提取表单元格数据的任务简单得多。

最新更新