当我在正则表达式模式中使用嵌套括号来说明优先级时,如何使用 re.findall() 函数检索匹配实例列表?
例子:
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+)\)', string)
有没有办法在不影响结果的情况下显式处理优先级?
最佳答案
可以说外括号是要匹配的逐字括号字符
>>> print re.findall(r'\((\d+)\)', s)
['12', '23', '34']
>>>
如果相反,如果您只是在谈论匹配一个表达式,如果它在一组平衡的括号内,那么我有一个坏消息要告诉您:正则表达式语言不够强大(因为那种语法不是“常规的”)。这不是 Python 实现问题...这是一个即使在理论上用正则表达式也无法解决的问题(换句话说,不是我们不知道如何解决...我们知道它无法解决)。
您需要编写明确的 Python 代码来解析任意嵌套的语法(如果您关心嵌套级别)。正则表达式是无法“计算”级别的 DFSA;这需要内存,至少需要一台 PDA。
关于Python re.findall() 和优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25440141/