对象的正则表达式

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聊天socket不显示消息   java显示存储在MySQL中的BLOB图像,无需写入磁盘   连接到SQLite数据库时发生java GAE受限类错误   如何在Java中自动从外部源(如文件)读取对象属性?   java使用google应用程序引擎发送电子邮件   java找不到应用程序。属性文件从War文件的外面   关于GridLayout和paintComponent方法的用户界面Java Swing问题   java6项目中的JavaOneLogin javasaml 2.0   数组Java GUI将文本文件数据导入JTable   游戏引擎从另一个类或文件中设置java数组的元素   构建如何将java类修补/复制到本地WebSphere服务器?   添加拦截器并使用Dagger2注入拦截器后,java翻新服务始终为空   java Guava LoadingCache如何处理备份存储中不存在的密钥   组织。openqa。硒。NoSuchSessionException:会话ID为空。在自动化中获取此错误(使用testng、selenium、java)   java是从4GB文件创建trie(JSON)的最快方法,只需1GB的ram?