僅在特定位置匹配表示式

通常,你希望僅在特定位置匹配表示式 (在其他位置保持不變,即)。請考慮以下句子:

An apple a day keeps the doctor away (I eat an apple everyday).

這裡蘋果出現兩次,可以通過所謂的回溯控制動詞來解決,這些動詞由較新的 regex 模組支援。這個想法是:

forget_this | or this | and this as well | (but keep this)

以我們的蘋果為例,這將是:

import regex as re
string = "An apple a day keeps the doctor away (I eat an apple everyday)."
rx = re.compile(r'''
    \([^()]*\) (*SKIP)(*FAIL)  # match anything in parentheses and "throw it away"
    |                          # or
    apple                      # match an apple
    ''', re.VERBOSE)
apples = rx.findall(string)
print(apples)
# only one

只有當它可以在括號外找到時才匹配 apple

以下是它的工作原理:

  • 雖然從尋找左到右,正規表示式引擎消耗一切的左邊,(*SKIP) 作為一個永遠真斷言。之後,它在 (*FAIL) 和回溯中正確失敗。
  • 現在它從右到左 (也就是回溯時) 到達 (*SKIP) 點,禁止向左前進。相反,引擎被告知扔掉左邊的任何東西並跳轉到呼叫 (*SKIP) 的位置。