为什么 Python 3.8 将“\x48”之类的字符串解释为 "H"。我想把它写成字符串中的“\x48”
Why Python 3.8 interpret String like "\x48" as "H". I want to write it as "\x48" in a string
我正在使用 python 编写一个简单的程序,该程序将示例 C++“.cpp”文件作为字符串,然后找到声明到其中的所有字符串。然后我想将该字符串替换为等效的十六进制代码,例如“H”等于“\x48”。
我的密码是
f = open("sample.cpp", "r")
f1 = f.read()
regex = r"\"(?:(?:(?!(?<!\)\").)*)\""
ii=0
for str2021 in find:
print("Output Of Encode=")
str2021="".join(r'\x{0:x}'.format(ord(c)) for c in find[ii])
print (str2021)
ii=ii+1
subst='\x22\x48\x22'
result = re.sub(regex,subst, f1, 0)
if result:
print("substituted op=")
print (result)
现在,当我打印结果值时,它显示“H”而不是“\x22\x48\x22”。我如何在 python 3.8 中强制执行此操作?
如果我这样做的话
result = re.sub(regex,str2021, f1, 0)
它给出了一个错误
raise s.error('bad escape %s' % this, len(this))
re.error: bad escape \x at position 0
我想对其进行迭代,以便在 cpp 文件中使用正则表达式找到每个字符串时,代码会自动将字符串转换为等效的 unicode 十六进制代码,如下所示
Sample.cpp
string a="abc";
string b="H";
它应该像这样更改这个 cpp 文件
string a="\x61\x62\x63";
string b="\x48";
请提出解决方案
您可以使用原始字符串:
subst = r'\x22\x48\x22'
然后,也更改您的 re.sub 调用:
re.sub(regex, re.escape(subst), f1, 0)
Python 文档说,不过只转义反斜杠更好:
re.sub(regex, subst.replace("\", r"\"), f1, 0)
我正在使用 python 编写一个简单的程序,该程序将示例 C++“.cpp”文件作为字符串,然后找到声明到其中的所有字符串。然后我想将该字符串替换为等效的十六进制代码,例如“H”等于“\x48”。
我的密码是
f = open("sample.cpp", "r")
f1 = f.read()
regex = r"\"(?:(?:(?!(?<!\)\").)*)\""
ii=0
for str2021 in find:
print("Output Of Encode=")
str2021="".join(r'\x{0:x}'.format(ord(c)) for c in find[ii])
print (str2021)
ii=ii+1
subst='\x22\x48\x22'
result = re.sub(regex,subst, f1, 0)
if result:
print("substituted op=")
print (result)
现在,当我打印结果值时,它显示“H”而不是“\x22\x48\x22”。我如何在 python 3.8 中强制执行此操作?
如果我这样做的话
result = re.sub(regex,str2021, f1, 0)
它给出了一个错误
raise s.error('bad escape %s' % this, len(this))
re.error: bad escape \x at position 0
我想对其进行迭代,以便在 cpp 文件中使用正则表达式找到每个字符串时,代码会自动将字符串转换为等效的 unicode 十六进制代码,如下所示
Sample.cpp
string a="abc";
string b="H";
它应该像这样更改这个 cpp 文件
string a="\x61\x62\x63";
string b="\x48";
请提出解决方案
您可以使用原始字符串:
subst = r'\x22\x48\x22'
然后,也更改您的 re.sub 调用:
re.sub(regex, re.escape(subst), f1, 0)
Python 文档说,不过只转义反斜杠更好:
re.sub(regex, subst.replace("\", r"\"), f1, 0)