如何在 Python 3.9 中删除 re.sub 中的反斜杠
How to remove backslashes from re.sub in Python 3.9
为什么我从我的正则表达式搜索和替换代码中得到这个反斜杠?
如果我不使用任何特殊字符,我将不会得到它们。
问题是如何删除这个反斜杠?
结果:
[bash]$ python /home/lucki1000/ESP/sr.py |grep "const char pass"
const char pass[] = "TESTpassword\.\-2"
我的预期:
const char pass[] = "TESTpassword.-2"
我的代码:
import re
replace_string = "TESTpassword.-2"
fname = "/home/lucki1000/ESP/adv.txt"
with open(fname, 'r+') as f:
text = f.read()
text = re.sub(r'(const char pass\[\] = \").*(\")', r'' + re.escape(replace_string) + r'', text)
f.seek(0)
print(text)
f.write(text)
f.truncate()
如果需要:
Arch linux(5.11.4-arch1-1 x64)
Python 3.9.2
如果替换字符串不是您想要的,为什么要 re.escape
?
re.escape
仅对将文字字符串转换为正则表达式有意义,但 re.sub
中的替换参数不是正则表达式,它只是一个字符串(有几个特殊情况,例如您在此处使用的反向引用)。
text = re.sub(r'(const char pass\[\] = \").*(\")', r'' + replace_string + r'', text)
Python 在这里的行为实际上有一些怪癖。 re.escape
不应反斜杠转义字符 class.
外的字面破折号
为什么我从我的正则表达式搜索和替换代码中得到这个反斜杠? 如果我不使用任何特殊字符,我将不会得到它们。
问题是如何删除这个反斜杠?
结果:
[bash]$ python /home/lucki1000/ESP/sr.py |grep "const char pass"
const char pass[] = "TESTpassword\.\-2"
我的预期:
const char pass[] = "TESTpassword.-2"
我的代码:
import re
replace_string = "TESTpassword.-2"
fname = "/home/lucki1000/ESP/adv.txt"
with open(fname, 'r+') as f:
text = f.read()
text = re.sub(r'(const char pass\[\] = \").*(\")', r'' + re.escape(replace_string) + r'', text)
f.seek(0)
print(text)
f.write(text)
f.truncate()
如果需要:
Arch linux(5.11.4-arch1-1 x64)
Python 3.9.2
如果替换字符串不是您想要的,为什么要 re.escape
?
re.escape
仅对将文字字符串转换为正则表达式有意义,但 re.sub
中的替换参数不是正则表达式,它只是一个字符串(有几个特殊情况,例如您在此处使用的反向引用)。
text = re.sub(r'(const char pass\[\] = \").*(\")', r'' + replace_string + r'', text)
Python 在这里的行为实际上有一些怪癖。 re.escape
不应反斜杠转义字符 class.