gpt4 book ai didi

Python re.findall() 和优先级

转载 作者:行者123 更新时间:2023-11-28 20:44:48 25 4
gpt4 key购买 nike

当我在正则表达式模式中使用嵌套括号来说明优先级时,如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com