Python正则表达式不是PCRE[英] Python regular expressions just ain't PCRE

问题描述

我对 re 正则表达式模块有点失望.在
特别是,缺乏对递归( (?R) 或 (?n) )的支持是一个
我的主要缺点.有很多很棒的事情可以做
用正则表达式这样完成,比如验证一个
数学表达式或使用嵌套括号解析语言,
引用或表达.

我缺少的另一个功能是一次性子模式和所有格
量词( (?>...) 和 ?+ *+ ++ {...}+ )非常适合避免
嵌套的一些复杂模式中的深度递归和低效率
量词.甚至 java.util.regex 也支持它们.

是否有计划支持这些功能?这些将是
Python 2.6 的强大功能,它们不会弄乱任何东西,并且
他们意味着少了一个使用 Perl 而不是 Python 的理由.

注意:我知道 Python 有 LALR 解析器生成器/解析器,但是
re 存在的真正原因是提供一个更简单、更多
解析或验证简单语言和处理文本的高效方法.
(pyparse/yappy/yapps/<插入你最喜欢的 Python 解析器
generator hereargument 可以用来跳过常规
语言中的表达式支持,或弃用 re.你要吗
那?并且遵循同样的规则,为什么我们会有 Python when
有C吗?)

推荐答案


"智者"<Wi*********@gmail.com 在留言中写道
新闻:11*********************@e65g2000hsc.googlegro ups.com...
|我对 re 正则表达式模块有点失望.

我相信当前的 Python re 模块是为了替换 Python
而编写的包装pcre以支持unicode.

|特别是,缺乏对递归( (?R) 或 (?n) )的支持是一个
|对我来说最大的缺点.

我不记得那些曾经在 pcre Python 中的人.也许他们是
新的.

|是否有计划在 re 中支持这些功能?

我还没有看到.你得问问作者.但是我怀疑
这将是一个超出他需要的不平凡的项目.

tjr


在 <11*********************@e65g2000hsc.googlegroups.com>,怀斯曼写道:
注意:我知道 Python 有 LALR 解析器生成器/解析器,但是
re 存在的真正原因是提供一个更简单、更多
解析或验证简单语言和处理文本的高效方法.
(pyparse/yappy/yapps/<插入你最喜欢的 Python 解析器
generator hereargument 可以用来跳过常规
语言中的表达式支持,或弃用 re.你要吗
那?并且遵循同样的规则,为什么我们会有 Python when
有C吗?)
我在这里不遵循你的推理.`re` 对于匹配标记很有用
对于更高级别的解析器,C 对于编写需要的部分很有用
硬件访问或"原始速度";纯Python太慢了.

与 Python 源码相比,正则表达式可能变得非常不可读
代码或 EBNF 语法,但在 EBNF 或 Python 对象中建模标记
不像简单的正则表达式那样紧凑和可读.所以两者都是`re`
和更高级别的解析器一起使用,并且不会取代每个解析器
其他.

C 和 Python 也是如此.恕我直言.

巧,
Marc ''BlackJack'' Rintsch

5 月 5 日上午 5:12,"Terry Reedy"<tjre...@udel.eduwrote:
我相信当前的 Python re 模块是为了替换 Python
而编写的包装pcre以支持unicode.
不知道PCRE当时怎么样,现在支持UTF-8
Unicode 模式和字符串,以及 Unicode 字符属性.也许
它可以重新引入 Python 吗?
我不记得那些曾经在 pcre Python 中的人.也许他们是
新的.
至少在今天,PCRE 支持递归和递归检查,
所有格量词和一次性子模式(禁用
在子模式中回溯),标注(用户函数在
中调用给定点数),以及其他有趣、强大的功能.


本文地址:https://www.itbaoku.cn/post/1050476.html