python perl 正则_关于regex:Python中的Perl兼容正则表达式(PCRE)

One super‐tiny difference is that for now, Perl’s case‐insensitive patterns use full string‐oriented casefolds while his regex module still uses simple single‐char‐oriented casefolds, but this is something he’s looking into. It’s actually a very hard problem, one which apart from Perl, only Ruby even attempts.

Ok.

blockquote>

在完全折叠的情况下,这意味着(例如)"?"现在可以在选择不区分大小写的匹配时正确匹配"SS","SS","??","?s"等。 (这在希腊语中比拉丁语更重要。) sub>

好。

另请参阅我第三次OSCON2011演讲中的幻灯片或doc源代码,标题为" Unicode支持大战:好,坏和(主要是)丑陋",以获取JavaScript,PHP,Go,Ruby,Python,Java中Unicode支持的一般问题。和Perl。如果无法使用Perl正则表达式或ICU正则表达式库(las,它没有命名捕获),那么Matthew的Python regex可能是最好的选择。

好。

N ??? B ??? s。?。?。 (= s'il vous pla?t,等等,mêmes'il vous pla?t pas sub> :) Python regex库的作者实际上并未在下面放置未经请求的非商业性非广告。 :)

好。

酷炫的regex功能

Python regex库具有超完美功能的功能,其中某些功能在任何其他正则表达式系统中都找不到。无论您是偶然使用它还是出于其????性或对Unicode的出色支持,这些都非常值得一试。

好。

该模块感兴趣的一些杰出功能包括:

好。

可变宽度后视,此功能在正则表达式引擎中很少见,并且在您真正想要它时非常沮丧。这很可能是正则表达式中最常请求的功能。

向后搜索,因此您不必自己先反转字符串。

作用域ismx类型的选项,因此(?i:foo)仅对foo(而不是整体)进行折叠,或者对(?-i:foo)仅对foo进行关闭。这就是Perl(或可以)的工作方式。

基于编辑距离的模糊匹配(Udi Manber的agrep和glimpse也具有)

通过\L插值隐式最短到最长排序的命名列表

仅与单词的开头或结尾(而非任一侧)匹配的元字符(\m,\m)

支持所有Unicode行分隔符(Java可以做到这一点,Perl可以做到,尽管在RL1.6中有点令人困惑。

根据RL1.3,在带括号的字符类上进行全套运算(并集,交集,差和对称差),比在Perl中轻松进行得多。

允许像(\w+\s+)+这样的重复捕获组,您可以在其中获得第一个组的所有单独匹配,而不仅仅是最后一个匹配。 (我相信C#也可以这样做。)

与前行中的偷偷摸摸的捕获组相比,这是一种更直接的方法来进行重叠匹配。

所有组的开始和结束位置,以便以后进行切片/子字符串操作,这与Perl的@+和@-数组非常相似。

分支重置运算符通过(?|...|...|...|)可以按照其在Perl中的工作方式重置每个分支中的组编号。

可以配置为让咖啡在早上等您。

支持RL2.3中更复杂的单词边界。

默认情况下假定Unicode字符串,并且完全支持RL1.2a,以便\w,\b,\s等对Unicode起作用。

支持字素的\X。

支持\G连续点声明。

对于64位版本(re仅具有32位索引)可以正常工作。

支持多线程。

好。

好的,这已经足够炒作了。 :)

好。

另一个优良的替代正则表达式引擎

如果您是正则表达式极客,那么最后一个值得一看的替代方法是将Python库绑定到Russ Cox出色的RE2库。它还本地支持Unicode,包括简单的基于字符的大小写折叠,并且与re不同,它同时提供了Unicode通用类别和Unicode脚本字符属性,这是更简单的Unicode经常需要的两个关键属性处理。

好。

尽管RE2错过了ICU,Perl和Python中的一些Unicode特性(例如{...}命名字符支持),但它具有非常重要的计算优势,因此当您担心基于饥饿的拒绝操作时,它便成为了正则表达式引擎的首选 通过Web查询等中的正则表达式进行服务攻击。 它通过禁止反向引用来管理此问题,这会导致正则表达式停止正常运行,并冒着在时间和空间上超指数爆炸的风险。

好。

RE2的库绑定不仅适用于C / C ++和Python,而且还适用于Perl,尤其是Go(适用于Go),后者打算很快替换那里的标准正则表达式库。

好。

好。

您正在寻找'(\w/[^/]+/\w*)'。

这样使用

import re

x = re.compile('(\w/[^/]+/\w*)')

s = 'match mysql m/^.\0\0\0

(4\.[-.\w]+)\0...\0/s p/MySQL/ i/$1/'

y = x.findall(s)

# y = ['m/^.\x00\x00\x00

(4\\.[-.\\w]+)\x00...\x00/s', 'p/MySQL/', 'i/$1/']

在与Edi Weitz的Regex Coach一起玩时发现了它,因此感谢对这个问题的评论,使我记得它的存在。

由于您要运行PCRE正则表达式,并且Python的re模块与原始PCRE源不同,因此您可能还想查看Arkadiusz Wahlig的PCRE Python绑定。 这样,您将可以访问本机PCRE,而无需在正则表达式之间转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值