跳转到主要内容

对象的正则表达式

项目描述

REfO

由于缺乏合适的名称,REfO代表“对象的正则表达式”。

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

除了这些,还可以将序列中的每个对象与任意Python函数进行匹配,而不仅仅是相等。例如,如果您有一个整数序列,您可以创建一个正则表达式,要求是偶数后跟一个素数,然后是一个3的倍数。

此软件由Rafael Carrascosa在2012年1月前几个月在Machinalis工作时编写。

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

Build Status

如何使用

语法与python的re略有不同,类似于pyparsing,您必须更明确地构建正则表达式的语法树。例如

"ab"Literal("a") + Literal("b")

"a*"Star(Literal("a"))

"(ab)+|(bb)*?"

a = Literal("a")
b = Literal("b")
regex = Plus(a + b) | Star(b + b, greedy=False)

您还可以将一个组分配给任何子匹配,并在以后检索匹配的内容,例如

regex = Group(Plus(a + b), "foobar")  | (b + b)
m = match(regex, "abab")
print m.span("foobar")  # prints (0, 4)

更多内容,请查看示例文件夹中的示例。

我们如何使用它

在 Machinalis,我们使用 REfO 来处理类似于 examples/words.py 中的应用程序,去看看吧!

关于实现

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

实现主要基于 Russ Cox 的笔记,请参阅 http://swtch.com/~rsc/regexp/regexp2.html 了解源代码。

如果您要阅读代码,以下是一些术语表

  • RE -- 正则表达式
  • VM -- 虚拟机
  • Epsilon 转移 -- 所有不消耗符号或停止线程的 VM 指令(例如 Accept)。

致谢

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

感谢 Javier Mansilla 对代码的审查和对其的热情。

感谢 Machinalis 所做的一切 :)

项目详情


下载文件

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

源代码分发

fenixrefo-0.13.1.tar.gz (8.9 kB 查看哈希值)

上传时间 源代码

构建分发

fenixrefo-0.13.1-py3-none-any.whl (9.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面