1

编写以下代码行的程序员可能使用了一个名为regex.

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

有人可以帮助解释什么A='\p{Word_Break=ALetter}'-+意思吗?

4

1 回答 1

3

\p{property=value}运算符匹配 unicode 代码点属性,并记录在您链接到的包索引页面上:

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

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

Word_Break该条目匹配其代码点具有属性值的任何 Unicode 字符ALetter(Unicode 代码点数据库中当前有 24941 个匹配项,有关详细信息,请参阅Unicode 文本分割,字边界章节规范)。

您提供的示例还使用标准 python字符串格式将部分表达式插入到正在编译的正则表达式中。“{A}”部分只是.format(A='...')要填充的部分的占位符。最终结果是:

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

-+序列只匹配 1 个或多个-破折号,就像在 pythonre模块表达式中一样,真的没有什么特别的。

现在,++ 之前的那个更有趣。它是一个占有量词,使用它可以防止正则表达式匹配器尝试所有可能的模式排列。这是一种性能优化,可以防止灾难性的回溯问题。

于 2012-09-02T16:05:15.743 回答