使用cython的谷歌re2的python 3兼容包装

sw-re2的Python项目详细描述


==
sw-re2
=


…内容:

summary
==


sw-re2是一个python扩展,它包装了google的re2正则表达式库
<;http://code.google.com/p/re2/>;`。它基于mike axiak的"pyre2"模块,
,除了对python 3的支持之外,它是相同的。


此版本的pyre2类似于您在"facebook的github存储库"中找到的pyre2<;http://github.com/facebook/pyre2/>;`
除了此版本的声明目标是替换"`re`"模块的"*drop in replacement"。


向后兼容性
========


此模块的声明目标是替换"`re`"。
我希望有些人能够进入他们模块的顶部并放置::

尝试:
将re2导入为re
除了importorror:
导入re

也就是说,这个模块可能永远不会有"re"模块的特性。例如,``re2``不处理前瞻断言(``(?=…)``).
因此,如果存在无法处理的regex,模块将自动返回到原始的"re"模块


因此,
我将向模块添加单个函数"set_fallback_notification"。
您可以编写::

尝试:
将re2导入为re
除了importorror:
导入re
其他:
重新设置回退通知(重新设置回退警告)

`` set-fallback_notification``可以处理3个值:
``re.fallback_安静地```(默认)、``re.fallback_warning``(引发警告)和
``re.fallback_exception``(引发异常)。

**注意**:re2模块将字节字符串视为utf-8。这与7位ascii完全向后兼容。
但是,在re2中,包含大于0x7f的值的字节的处理方式与在re中非常不同。
re库悄悄地忽略输入字符串中的无效utf8,并对模式中的无效utf8引发异常。
例如:

>;>re.findall(r'.','\x80\x81\x82')
['\x80','\x81','\x82']
>;>re2.findall(r'.,'\x80\x81\x82')
[]


如果您需要在任意字节流上使用正则表达式,则此库可能不适合您。

<;http://code.google.com/p/re2/>;`
*python开发头文件(例如*sudo apt get install python dev*)
*一个带有``g++``的生成环境(例如*sudo apt get install build essential*)

如果安装了setuptools(或使用"pip"),可以尝试使用"easy-install"安装:

$sudo easy-install re2

如果不想使用"setuptools",也可以从"pypi"下载tarball<;http://pypi.python.org/pypi/re2/>;`.

除此之外,您还可以克隆此存储库并尝试从中安装它。为此,请运行:

$git clone git://github.com/stephenwattam/pyre2.git
$cd pyre2.git
$sudo python setup.py install

=0.13.

====


当前的一个问题是unicode支持。如您所知,``re2``支持utf8,
,这肯定有别于unicode。现在,模块将自动将任何unicode字符串编码为utf8,这很慢(它还必须在每次替换或拆分时将utf8字符串解码回unicode对象)。
你最好在utf8中使用bytestrings,同时使用re2
并在所有事情之后对其进行编码您需要完成的工作已经完成。


performance
==



performance当然是这个模块的重点,因此它可以更好地执行。
正则表达式的复杂度变化很大,而"re2"的显著特点是它的渐近性能良好。也就是说,对于非常简单的替换,
我发现有时候python的常规"re"模块实际上稍微快一点。
但是,当"re"模块变慢时,它会变慢,而这个模块会嗡嗡作响。

与来自collosal wikipedia
xml文件的8MB文本相比。我多次运行它们,小心使用"timeit"模块。
要查看更多详细信息,请参见"性能脚本"http://github.com/stephenwattam/pyre2/tree/master/tests/performance.py>;`.

+————————————————————————————————————————————————————————————————————————————————————————————————————|#总运行次数``re``time(s)``re2``time(s)%``re``time ``regex``time(s)%``regex``time|
+=================+===========================================================================+============+==============+===============+=============+=================+================+
|Findall URI|Email|Find list of '([a-zA-Z][a-zA-Z0-9]*)://([^ /]+)(/[^ ]*)?|([^@]+)@([^@]+)'2 19.961 0.336 1.68%11.463 2.93%|
+——+——+—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————| 100 16.032 2.622 16.35%2.895 90.54%
+---------+---------+---------+------+------+------+------+------+------+------+
删除wikilinks此测试按<;page>;标记拆分数据。| 100 15.983 1.406 8.80%2.252 62.43%|
+——+——+—————————————————————————————————————————————————————————————————————————————————————————————————————————————

当前状态
===


并通知我!

如果您愿意的话,可以在github上提交bug报告,因为这是一个支持python 3兼容性的fork,我建议您也向原始作者报告:
`mike axiak contact page<;http://mike.steph.net/contact>;` `.

==


帮助,一件非常有用的事情是为它编写全面的测试。实际上很简单:

*使用常规python"re"模块出现正则表达式问题。
*以python回溯格式编写会话"example"<;http://github.com/axiak/pyre2/blob/master/tests/search.txt>;` ` `.
*将"import re"替换为"import re2"re``.
*将其保存为tests目录中的.txt文件。您可以根据自己的喜好对其进行注释,并用4个空格缩进代码。


缺少的功能
==


>当前缺少的功能有:

*如果使用不带回调的替换方法,不支持非0/1的maxslit参数。



感谢mike axiak,他完成了大部分工作。

删掉代码后,我要感谢david reiss
和facebook给我的最初灵感。另外,我还得把这个自述文件挖出来!

此外,如果不是因为在re2的团队和在cython工作的少数人所做的大量工作,这个库当然是不可能的。

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

推荐PyPI第三方库


热门话题
java BasicDataSource提交不起作用   java如何在SpringSecurity中为特殊情况下的身份验证失败定制http状态代码?   java Hibernate,SQL Server 2016=SQL错误:207无效列名   继承确保运行时Java超类是正确的   java重写hashcode方法以返回类中变量的hashcode   java无法缩放不同设备的文本大小   java Comparator作为静态字段接口还是实现?   java MessageSource不重新加载属性文件   使用方法setToolTip()在中更改后,操作上的java Keybinding工具提示消失   java使用maven添加调试符号   java转换时应该绑定哪个版本的JRE。使用launch4j将jar转换为exe   java Anylogic实验坚持使用范围内的可变参数,但在自由形式参数中工作良好   关于BuffereImage和Image的java问题   java当我试图在终端的Applications文件夹中显示内容时,我得到了“chromeapps.localized”   java如何使用正则表达式模式拆分字符串   java如何计算重复联系人数   java真的不可能保护Android应用免受逆向工程的影响吗?   java无法将值从活动转移到存储库以将其传递到Dao方法   Java中的名称空间包相对标识符路径   排序Java添加和排序列表的快速方法