铁锈“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模块(compile,search,match,findall,finditer, RegexObject和MatchObject)
Rure接口公开了“按需付费”API,启用 请求所需的最小计算:文本是否匹配(is_match), 它在哪里匹配(find,find_iter),子匹配在哪里 (captures,captures_iter)
插入替换应该像import rure as re一样简单, 并使用python文档中记录的api (https://docs.python.org/3/library/re.html,https://docs.python.org/2/library/re.html)。 re支持的标志将自动转换为 由rure支持
有关此垫片的一个重要注意事项:生锈的发动机工作在 给定搜索文本中的字节偏移量,而python在unicode上操作 代码点生锈的引擎保证返回相应的偏移量 有效的UTF8段默认情况下,返回的MatchObject是 这个库将解码捕获的文本。由start返回的偏移量, end和span是字节偏移量,而不是字符偏移量。 将它们与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提供了二进制轮子。锈的具体版本 编译器,rure和regex板条箱将在变更日志中可用。
从源头安装tarball需要人工建造铁锈 指向生成的目录。如果你想利用现代CPU, 很可能您想要用SSE3和SIMD构建regex为此, 您需要更新regex/regex capi/cargo.toml以包含simd accel 功能:regex={version=“0.2.2”,path=“..”,功能=[“simd accel”]}
货物构建-发布-清单路径/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