我正在訪問一些舊的Python代碼,它們之前沒有拋出任何錯誤,但是當我嘗試運行它時,我遇到了一個錯誤。這是在給我一個錯誤代碼:Python正則表達式丟失括號錯誤
import re
text = r"I quote \"How're you?\" to you."
double = [z.start() for z in re.finditer('(?<!\\)(?:\\\\)*(")', text)]
single = [z.start() for z in re.finditer("(?<!\\)(?:\\\\)*(')", text)]
print(double)
print(single)
我曾希望從這項計劃中得到的輸出是:
[]
[13]
然而,這給我的錯誤:
double = [z.start() for z in re.finditer('(?<!(?:\\))(?:\\\\)*(")', text)]
File "C:\Users\Me\AppData\Local\Programs\Python\Python35-32\lib\re.py", line 220, in finditer
return _compile(pattern, flags).finditer(string)
File "C:\Users\Me\AppData\Local\Programs\Python\Python35-32\lib\re.py", line 293, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\Users\Me\AppData\Local\Programs\Python\Python35-32\lib\sre_compile.py", line 536, in compile
p = sre_parse.parse(p, flags)
File "C:\Users\Me\AppData\Local\Programs\Python\Python35-32\lib\sre_parse.py", line 829, in parse
p = _parse_sub(source, pattern, 0)
File "C:\Users\Me\AppData\Local\Programs\Python\Python35-32\lib\sre_parse.py", line 437, in _parse_sub
itemsappend(_parse(source, state))
File "C:\Users\Me\AppData\Local\Programs\Python\Python35-32\lib\sre_parse.py", line 722, in _parse
source.tell() - start)
sre_constants.error: missing), unterminated subpattern at position 0
值得一提的是,我在運行這個之前更新了python,所以也許python的更新導致了這個錯誤? (我現在正在運行Python 3.5.2,但我不記得以前是什麼)
此外,萬一它有幫助,我試圖找到所有情況下的單引號或雙引號沒有逃脫反斜線即
「和」拾取
\「和\」不
\」和\」拾取等等...
我打算用這然後將字符串中的嵌套字符串從字符串的其他部分分離出來
這是否定後視(? <!\\)這是造成這個問題,但我看不出有什麼問題。反斜槓由前面的那個逃脫,所以我看不到丟失的支架在哪裏。
奇怪的是,這適用於regex101,所以我開始用盡方法來調試這個。
我試圖爲負回顧後不同的替代,試圖得到這個工作:
(?<!\) #Gets the error, but that is expected
(?<!\\\\) #Same error again, same problem as the original case
(?<!\\\) #Returns [8, 20] and [13]
顯然這最後一個有不正確的語法。然而,Python正在將其解釋爲正確的,但我不知道它實際上將其解釋爲什麼。
無論如何,我知道可能有一些簡單的解釋,也許一些RegEx語法我不知道。另外,如果有一種替代方案,對於我所嘗試的方法來說不那麼麻煩,請隨時給我提供該解決方案。
非常感謝你,我幾乎撕裂了我的頭髮,
EDW
regex101會自動使它成爲原始字符串'r'...''。也許試試? –