对象的正则表达式
REfO的Python项目详细描述
由于没有一个合适的名称,refo代表“对象的正则表达式”。
它是一个python库,提供了与python非常相似的功能 re模块(正则表达式),但用于对象的任意序列 而不是字符串(字符序列)。
除此之外,还可以将序列中的每个对象与 不仅是相等,而且是任意的python函数。 例如,如果有一个整数序列,则可以将 要求偶数后跟质数的表达式 后跟一个3可除数。
这个软件是由Rafael Carrascosa在Machinalis工作时编写的。 2012年的头几个月。
联系人:rcarrascosa@machinalis.com 或rafacarrascosa xyz gmail.com(将“xyz”替换为“@”)
如何使用
语法与python的re略有不同,与 pyparsing,您必须或多或少地显式地构建 你的正则表达式。例如:
“a b”是文字(“a”)+文字(“b”)
“a*”是星(文字(“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)
有关更多信息,请查看examples文件夹中的示例。
我们如何使用它
在Machinalis,我们将REF用于类似于 examples/words.py,看看吧!
关于实现
我使用类似汤普森的虚拟机aproach,它确保多项式时间 最坏情况的复杂性。有关此示例,请参见examples/poly_time.py。
该实现主要基于russ cox注释,请参见 http://swtch.com/~rsc/regexp/regexp2.html用于源。
如果要阅读代码,请使用一些词汇表:
- RE – regular expression
- VM – virtual machine
- Epsilon transitions – All VM instructions that do not consume a symbol
- or stop the thread (for example an Accept).
致谢
感谢Russ Cox在您的网站上分享了这些令人惊叹的信息和见解。
感谢javier mansilla审阅代码并对此充满热情。
感谢Machinalis提供的一切:)