gpt4 book ai didi

python - 反斜杠和转义字符的奇数或偶数

转载 作者:太空宇宙 更新时间:2023-11-04 05:50:35 24 4
gpt4 key购买 nike

下面的代码有点问题。

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

我的正则表达式有什么问题以及如何解决?

最佳答案

使用以下正则表达式:

pattern = re.compile(r"(?<!\\)((?:\\\\)*)@")

并替换为 <star>

输出:

ok<star>\@.py 
ok<star>\\<star>.py
ok<star>\\\@.py
ok<star>\\\\<star>.py
ok<star>\\\\\@.py

参见 DEMO

关于python - 反斜杠和转义字符的奇数或偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com