假設我有以下字符串,并且我想提取以大寫字母開頭的所有標識符,除非在引號內找到:Match1Match2(Match3("NoMatch1 a NoMatch2 blabla"), Match4)meh<Match5>在這種情況下,Match1、Match2、Match3、Match4和Match5應該被捕獲,而NoMatch1和NoMatch2應該被忽略,因為它們位于帶引號的字符串內。我可以使用 JS 正則表達式獲得所需的結果。但是我所有將其轉換為有效的 Python 正則表達式的嘗試都慘敗。到目前為止我遇到的錯誤消息:( A lookbehind assertion has to be fixed width* A quantifier inside a lookbehind makes it non-fixed width) A lookbehind assertion has to be fixed width* A quantifier inside a lookbehind makes it non-fixed width我不知道如何解決這個問題。使用 Python 正則表達式可以實現這一點嗎?如果是這樣,我錯過了什么?注意:我還沒有實際的 Python 代碼,到目前為止我一直在https://regex101.com上嘗試這一點。
1 回答

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
您可以使用以下模式:
\b[A-Z]\w+(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
技巧是使用正向 Lookahead(與 Lookbehind 不同,它可以具有非固定長度)。因此,我們使用 Lookahead 來檢查雙引號對(因為每個開頭引號都有一個結尾引號)。只要要匹配的單詞后面有偶數個雙引號(即成對),我們就知道它本身沒有被引號括起來。
添加回答
舉報
0/150
提交
取消