我有一個小小的問題,下面的代碼。奇數或偶數的反斜槓和溢出字符
import re
pattern = re.compile(r"((?:^|[^\\@]|\\.)+)@")
for text in [
r"[email protected]\@.py",
r"[email protected]\\@.py",
r"[email protected]\\\@.py",
r"[email protected]\\\\@.py",
r"[email protected]\\\\\@.py",
]:
search = re.search(pattern, text)
print('---', text, sep="\n")
if search:
print(pattern.sub(r"\1<star>", text))
else:
print('<< NOTHING FOUND ! >>')
此打印:
---
[email protected]\@.py
ok<star>\@.py
---
[email protected]\\@.py
ok<star>\\<star>.py
---
[email protected]\\\@.py
ok<star>\\\<star>.py
---
[email protected]\\\\@.py
ok<star>\\\\<star>.py
---
[email protected]\\\\\@.py
ok<star>\\\\\<star>.py
問題與第3個輸出是錯誤的,因爲首先是一個轉義的反斜槓,然後轉義字符@開始。這個問題繼續與更多的反斜槓:剛纔看到最後的輸出有兩個逃跑反斜槓,然後轉義字符@ ..
這裏是預期的輸出,其中@的確逃脫只有當有奇數個\之前它。
---
[email protected]\@.py
ok<star>\@.py
---
[email protected]\\@.py
ok<star>\\<star>.py
---
[email protected]\\\@.py
ok<star>\\\@.py
---
[email protected]\\\\@.py
ok<star>\\\\<star>.py
---
[email protected]\\\\\@.py
ok<star>\\\\\@.py
我的正則表達式有什麼問題,以及如何解決它?
你還沒有告訴我們預期的行爲。如果我們不知道它應該做什麼,我們將如何解決它? –
@KarolyHorvath我已更新我的問題。 – projetmbc