对象的正则表达式
项目描述
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 所做的一切 :)