对象的正则表达式
项目描述
REfO
由于缺乏合适的名称,REfO代表“对象的正则表达式”。
这是一个Python库,它提供的功能与Python的re
模块(正则表达式)非常相似,但用于任意对象序列(字符序列)而不是字符串。
除了这些,还可以将序列中的每个对象与任意Python函数进行匹配,而不仅仅是相等。例如,如果您有一个整数序列,您可以创建一个正则表达式,要求是偶数后跟一个素数,然后是一个3的倍数。
此软件由Rafael Carrascosa在2012年1月前几个月在Machinalis工作时编写。
联系方式: rcarrascosa@machinalis.com 或 rafacarrascosa xyz gmail.com(将“ xyz ”替换为“ @”)
如何使用
语法与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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6e9de2efcd5525b3600d71ce1bbe979f9877f527973a2e585cb63d75b40d16aa |
|
MD5 | cbadafa99bb3286a50e54e41fe450980 |
|
BLAKE2b-256 | 24cc6766ae549212657f160273d598e0d5640332f4c905b65bcae4afaa674279 |
fenixrefo-0.13.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cbacd8d67eaf9df005b3a0c152aaf54eba16a4d86e57e179acb6a791ad83ba6a |
|
MD5 | f7818336799007d1f27f1a44b49a7305 |
|
BLAKE2b-256 | fff3657c7a62ad5bcd75268c112303586f501a2d5503a46302a19fcf314392ac |