对象的正则表达式

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提供的一切:)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有外部属性文件的java prunsrv服务   java NoClassDefFoundError:org/hibernate/annotations/common/reflection/MetadataProvider   使用Android Studio进行java单元测试云数据存储   java如何使用Junit在SeleniumWebDriver中生成测试用例报告   java根据用户输入显示多个动画形状(JavaFX)   java枚举文件和Jar资源的统一机制   使用Spring OXM的java多封送器/解封器   java无法解析:com。谷歌。安卓exoplayer:exoplayer smoothstreaming:2.9.1   java如何创建迷你对话框(带图片)   java在eclipse中单击自定义菜单项时显示一个对话框   java使用Hibernate在插入前检查重复值   Jsoup只过滤掉从html到文本的一些标记   域在字符串Java Mail中包含非法字符   自定义Jackson反序列化程序中的java委托   java Graphql联合在扩展关系上返回null   java如果我有entitymanager,如何获取会话对象?