Python re.findall() 和优先级

标签 python regex

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

相关文章:

python sqlalchemy 性能?

python - 如何覆盖 Sphinx 插入的英文标签

java - 棘手的特殊单引号

java - 如何使用正则表达式从字符串中删除外部标点符号

C# string.remove 和 Regex.Match

python - 在 shell 中使用 python,就好像它是 awk

python - 获取 Pandas 数据帧的两列之间的一系列对的第一个和最后一个值

python - Turtle.goto 错误

regex - Scala 正则表达式 "starts with lowercase alphabets"不起作用

java - 仅在点之后替换括号