2012-09-02 158 views
1

谁写了下面的线路可能使用Python包称为regex程序员。Python的正则表达式编译

UNIT = regex.compile("(?:{A}(?:'{A})?)++|-+|\S".format(A='\p{Word_Break=ALetter}')) 

有人能帮忙解释一下A='\p{Word_Break=ALetter}'-+手段?

+0

我已经删除了'pypi'标签;该模块可能通过pypi分发,但这个问题不是关于'pypi'本身。 –

回答

3

\p{property=value}操作上的Unicode码点的属性相匹配,并包索引页上记录您链接到:

  • 的Unicode码点的属性,包括脚本和块

    \p{property=value}; \P{property=value}; \p{value} ; \P{value} 
    

入口任何Unicode字符,其匹配合作depoint与价值ALetter一个Word_Break property(目前有以Unicode码点数据库24941根火柴,看到Unicode Text Segmentation, Word Boundaries chapter specifiation了解详细信息)。

你给的例子还使用标准的Python string formatting的部分表达插值到正则表达式被编译。 “{A}”部分只是.format(A='...')部分的占位符。最终的结果是:

"(?:\p{Word_Break=ALetter}(?:'\p{Word_Break=ALetter})?)++|-+|\S" 

-+序列只是匹配1个或多个-破折号,就像在Python re模块表情,这不是什么特别的东西,真的。

现在,++之前这是更有趣。这是一个possessive quantifier,使用它可以防止正则表达式匹配器尝试所有可能的模式排列。这是一个性能优化,可以防止catastrophic backtracking问题。

+0

Word_Break属性就像逗号,公告一样吗?我不完全理解链接页面。 – juju

+0

@juju:'Word_Break'将代码点分类成单词和其间的东西,因此处理文本的软件可以确定单词在任何脚本中的开始和结束位置。 'ALetter'就是这样一个类,主要是字母字符。 –

+0

链接页面是否引入了“Word_Break”涵盖的各种语言?你会用英语给我一个例子吗? – juju