Python正则匹配优先级问题

例子:

例:

import re
string = 'blah blah 12234 (12) (23) (34)'
print re.findall(r'\((\d)+)\)', string)

打印:

  [('12', '2'), ('23', '3'), ('34', '4')]

而不是预期的

  ['12', '23', '34']

当然,在这种情况下,只需更改内部括号即可解决此问题:

解决方案
>>> print re.findall(r'\((\d+)\)', s)
['12', '23', '34']
>>>

相反,如果您仅在匹配表达式位于平衡的括号内时才讨论匹配,那么对您来说是个坏消息:正则表达式语言的功能还不够强大(因为这种语法不是“正则”的) 。这不是Python的实现问题…这是一个即使在理论上使用正则表达式也无法解决的问题(换句话说,这不是我们不知道如何解决它……我们知道它无法解决)。

您需要编写明确的Python代码来解析任意嵌套的语法(如果您关心嵌套级别)。正则表达式是DFSA,无法“计算”级别;需要内存和至少一个PDA。

本文链接:https://my.lmcjl.com/post/15246.html

展开阅读全文

4 评论

留下您的评论.