铁锈“regex”板条箱的python绑定。此实现使用有限自动机并保证所有输入的线性时间匹配。

rure的Python项目详细描述


rure是Python绑定Rust的regex库,它保证了线性时间 使用有限自动机搜索作为交换,它必须放弃一些普通的 regex的特性,比如反向引用和任意查找是的 但是包括捕获组、延迟匹配、Unicode支持和Word 边界断言。它的匹配语义通常对应于Perl的, 或者“最左边的第一个”。也就是说,报告的匹配位置对应于 回溯引擎将找到的第一个匹配项

在rust中记录了语法和其他有用的东西 api文档:http://doc.rust-lang.org/regex/regex/index.html

示例

此包提供两个regex引擎入口点:Rure, 底层rust api的oo包装,以及 stdlibre模块(compilesearchmatchfindallfinditerRegexObjectMatchObject

Rure接口公开了“按需付费”API,启用 请求所需的最小计算:文本是否匹配(is_match), 它在哪里匹配(findfind_iter),子匹配在哪里 (capturescaptures_iter

插入替换应该像import rure as re一样简单, 并使用python文档中记录的api (https://docs.python.org/3/library/re.htmlhttps://docs.python.org/2/library/re.html)。 re支持的标志将自动转换为 由rure支持

有关此垫片的一个重要注意事项:生锈的发动机工作在 给定搜索文本中的字节偏移量,而python在unicode上操作 代码点生锈的引擎保证返回相应的偏移量 有效的UTF8段默认情况下,返回的MatchObject是 这个库将解码捕获的文本。由start返回的偏移量, endspan是字节偏移量,而不是字符偏移量。 将它们与string属性一起使用是安全的,因此您可以这样做:

>>> email = u"tony@tiremove_thisger.net"
>>> m = re.search(u"remove_this", email)
>>> m.string[:m.start()] + m.string[m.end():].decode('utf8')
u'tony@tiger.net'

这个包还包括一个is_match(pattern, string, flags=0)函数 (以及RegexObject上的相应方法),它只返回布尔值。

性能

很快它的核心匹配引擎是一个懒惰的DFA,这就是GNU grep 和RE2使用与GNU grep一样,这个regex引擎可以检测多字节文本 在regex中,将使用快速文本字符串搜索快速跳过 通过输入找到可能的匹配位置。

所有内存使用都是有限制的,所有搜索都需要线性时间 输入字符串

有关详细信息,请参阅《性能指南》: https://github.com/rust-lang-nursery/regex/blob/master/PERFORMANCE.md

缺少

这个包中有一些东西在Rust API中丢失了。 他们没有什么特别的(已知的)原因,只是没有 已经实施

  • 用正则表达式拆分字符串。
  • 用其他文本替换字符串中的regex匹配项

安装

为macos提供了二进制轮子。锈的具体版本 编译器,rureregex板条箱将在变更日志中可用。

从源头安装tarball需要人工建造铁锈 指向生成的目录。如果你想利用现代CPU, 很可能您想要用SSE3和SIMD构建regex为此, 您需要更新regex/regex capi/cargo.toml以包含simd accel 功能:regex={version=“0.2.2”,path=“..”,功能=[“simd accel”]}

  • git克隆https://github.com/rust-lang-nursery/regex

  • 货物构建-发布-清单路径/path/to/regex/regex capi/cargo.toml

    • To build with SSE3: RUSTFLAGS=”-C target-feature=+ssse3” cargo build –release –features simd-accel
  • RURE_DIR=/path/to/regex/regex capi python setup.py bdist_wheel

  • pip install rure–no index-f./dist

历史

0.2.1(2019-04-07)

  • 向上支持多个Python版本的日期生成管道

  • 编译的二进制轮:

    • Rust: 1.33.0
    • regex: 1.0
    • rure (regex-capi): 0.2.1

0.2.0(2018-03-04)

  • 添加对RegexSet的支持

0.1.2(2017-10-09)

  • pypi上的第一个版本

  • 编译的二进制轮:

    • Rust: 1.20.0
    • regex: 0.2.2
    • rure (regex-capi): 0.2.0

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

推荐PyPI第三方库


热门话题
如何在java中使用REST/SOAP获取联邦快递的跟踪细节?   安卓将项目同步到github不会同步java源文件   JavaImpala通过jdbc使元数据无效   java如何在安卓中使用Chaquopy显示加载动画   java我应该使用void函数,但我不知道如何使用   java合并两个排序的ArrayList   通过点击ImageView在Android上生成java随机图像   java深度优先搜索错误   java在子类中初始化时设置泛型参数   java安卓:NFC意图在主项目所依赖的库中   java SSL错误证书错误   访问RadioButton数组时出现java Android NullPointerException   无法加载JNI共享库“C:\Program Files\Java\jdk1.7.0\U 40\bin\..\jre\bin\server\jvm.dll”   java如何检查jstl中是否存在hashmap值