Skip to main content

对象的正则表达式

项目描述

REfO 没有一个合适的名称,代表“对象的正则表达式”。

它是一个 python 库,提供与 python re模块(正则表达式)非常相似的功能, 但用于任意对象序列而不是字符串(字符序列)。

除此之外,可以匹配序列中的每个对象,不仅可以相等,还可以匹配任意 python 函数。例如,如果您有一个整数序列,您可以创建一个正则表达式,要求输入一个偶数,后跟一个素数,后跟一个 3 整除数。

该软件由 Rafael Carrascosa 于 2012 年头几个月在 Machinalis 工作时编写。

联系方式:rcarrascosa @ machinalis com 或 rafacarrascosa xyz gmail.com(将“xyz”替换为“@”)

如何使用它

语法与 python 的 re 有点不同,并且类似于 pyparsing,您必须或多或少显式地构建正则表达式的语法树。例如:

“ab”文字(“a”)+文字(“b”)

“a*”星号(字面量(“a”))

“(ab)+|(bb)*?” 是:

a = Literal(“a”) b = Literal(“b”) 正则表达式 = Plus(a + b) | 星(b + b,贪心=假)

您还可以将组分配给任何子匹配,然后检索匹配的内容,例如:

正则表达式 = Group(Plus(a + b), “foobar”) | (b + b) m = match(regex, “abab”) print m.span(“foobar”) # prints (0, 4)

有关更多信息,请查看示例文件夹中的示例。

我们如何使用它

在 Machinalis,我们将 REfO 用于类似于 示例/words.py 中的应用程序,看看吧!

关于实施

我使用类似 Thompson 的虚拟机方法,它确保多项式时间最坏情况的复杂性。有关此示例,请参见示例/poly_time.py

该实现很大程度上基于 Russ Cox 的注释,请参阅 http://swtch.com/~rsc/regexp/regexp2.html获取源代码。

如果你去阅读代码,一些词汇表:

  • RE——正则表达式

  • VM——虚拟机

  • Epsilon 转换——所有不消耗符号的 VM 指令

    或停止线程(例如接受)。

致谢

感谢 Russ Cox 在您的网站上分享精彩的信息和见解。

感谢 Javier Mansilla 审查代码并对此充满热情。

感谢 Machinalis 所做的一切 :)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

REfO-0.13.tar.gz (12.0 kB 查看哈希

已上传 source