0

我正在将较旧的 Python 代码移植到 Python 3。该代码在 Python 2.7 中工作。以下行正在创建不平衡括号错误:

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

我不知道如何解决这个问题。任何建议将不胜感激如何分解并弄清楚。

4

1 回答 1

0

您的表达几乎无法阅读,并且大多数\反斜杠实际上是没有意义的。那些确实有意义的是\[\(组合\),其中大多数看起来根本不应该存在

例如。零件\[^\<]坏了,因为逃逸\[使]支架不平衡。

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

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

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

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

看起来您正在尝试使用正则表达式解析 HTML。这不会很好地工作。请改用适当的 HTML 解析器,例如 BeautifulSoup 将使提取表格单元格数据的任务变得更加简单。

于 2013-05-28T20:01:09.293 回答