2012-09-02 230 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