2017-07-27 22 views
0

我無法找到解釋re庫中某些操作的到期標誌。這個標誌在Python庫3的re庫中做了些什麼?

https://docs.python.org/3.6/library/re.html

例如,我有Python代碼以下位:

nestedPar = re.findall(r"\([^\(\)]*\)", s, 0) 

,但我不能確定什麼,當我改變到底正在發生的是0到1,因爲它會導致崩潰。

任何人都可以解釋這個標誌意味着什麼嗎?

+2

該文檔沒有提到國旗是一個1.但有多個例子,例如, ** flags = re.IGNORECASE ** –

+5

標記從[here]開始記錄(https://docs.python.org/3.6/library/re.html#re.A)。它們的數值沒有記錄,並且您不應該爲標誌傳遞int常量。 – user2357112

回答

2

第三個參數是選項的位掩碼,位掩碼定義爲(這一點,從技術上說,可以從版本而有所不同):

SRE_FLAG_TEMPLATE = 1 # template mode (disable backtracking) 
SRE_FLAG_IGNORECASE = 2 # case insensitive 
SRE_FLAG_LOCALE = 4 # honour system locale 
SRE_FLAG_MULTILINE = 8 # treat target as multiline string 
SRE_FLAG_DOTALL = 16 # treat target as a single string 
SRE_FLAG_UNICODE = 32 # use unicode locale 
SRE_FLAG_VERBOSE = 64 # ignore whitespace and comments 
SRE_FLAG_DEBUG = 128 # debugging 

使用一個簡單的按位OR(或你經常+)你可以組合多個標誌(例如re.MULTILINE | re.DOTALL)。它不應該在1上失敗,但請不要直接使用數字,它們被分配給有意義的常量是有原因的。

編輯 - 模板模式(re.Tre.TEMPLATE),其標誌如上圖所示爲1,是實驗性的,很多事情都可能出錯呢,直接從源:

# sre extensions (experimental, don't rely on these) 
T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE # disable backtracking 

所以您遇到了模板模式的問題。無論哪種方式爲幸福的生活,不要自己設置標誌:)

+0

可以肯定的是,它正在轟炸的字符串是 - a(bc)de – LandSharks

+1

只是一個小小的挑剔,但是_「編纂」_並不是特別提供了什麼信息。也許_「他們被分配到**有意義的常量**出於某種原因」_會更好的措辭? –

+0

@ChristianDean - 公平點,更新。 – zwer

相關問題