我对以下代码有一点小问题。
问题始于第三个输出,因为首先有一个转义的反斜杠,然后是转义字符@。问题继续出现更多反斜杠:只需查看最后一个输出,其中有两个转义的反斜杠,然后是转义字符@。
以下是预期输出,当@前面有奇数个反斜杠时才进行转义。
我的正则表达式有什么问题,怎样才能修复它?
import re
pattern = re.compile(r"((?:^|[^\\@]|\\.)+)@")
for text in [
r"ok@\@.py",
r"ok@\\@.py",
r"ok@\\\@.py",
r"ok@\\\\@.py",
r"ok@\\\\\@.py",
]:
search = re.search(pattern, text)
print('---', text, sep="\n")
if search:
print(pattern.sub(r"\1<star>", text))
else:
print('<< NOTHING FOUND ! >>')
这将打印:
---
ok@\@.py
ok<star>\@.py
---
ok@\\@.py
ok<star>\\<star>.py
---
ok@\\\@.py
ok<star>\\\<star>.py
---
ok@\\\\@.py
ok<star>\\\\<star>.py
---
ok@\\\\\@.py
ok<star>\\\\\<star>.py
问题始于第三个输出,因为首先有一个转义的反斜杠,然后是转义字符@。问题继续出现更多反斜杠:只需查看最后一个输出,其中有两个转义的反斜杠,然后是转义字符@。
以下是预期输出,当@前面有奇数个反斜杠时才进行转义。
---
ok@\@.py
ok<star>\@.py
---
ok@\\@.py
ok<star>\\<star>.py
---
ok@\\\@.py
ok<star>\\\@.py
---
ok@\\\\@.py
ok<star>\\\\<star>.py
---
ok@\\\\\@.py
ok<star>\\\\\@.py
我的正则表达式有什么问题,怎样才能修复它?