在我的代碼中,我從子表達式列表中生成正則表達式。加入表情,如果我把他們每個人在非匹配組(?:…)
正常工作:無法匹配的正則表達式(對於生成的表達式)
# concatenation:
joined_expr = ''.join('(?:{})'.format(expr) for expr in subexpression)
# disjunction:
joined_expr = '|'.join('(?:{})'.format(expr) for expr in subexpression)
問題是:這樣做的結果是加盟的表達是一個更大的表達式一個子表達式,並subexpression
可能是空的,但連接的表達式不能與空字符串匹配。
那麼爲什麼要讓成爲一個正則表達式,這與不符? (?:(?!.).)
會工作嗎?如果不是,爲什麼不呢? Python的re
引擎是否理解我嘗試創建失敗的分支並對其進行優化?
有,如果它被標記爲一個非捕獲組是問題,如果一個空字符串相匹配? –
'joined_expr'將用於連接的表達式,這是一個析取的分支。該分支不能匹配(即必須失敗)。我在這裏使用「匹配」一詞作爲「不會失敗」。 – kay
如果您正在尋找不對結果字符串進行操作(如果它爲空),爲什麼不直接跳過re並執行match = regex.match(string);如果匹配和布爾(字符串):do_code' 它的方式更簡單,可能比通過組合條件檢查空字符串更快。 –