我有一组从文件中读取的字符串['\x1\p1', '\x2\p2', '\x3\p3', ... etc.]
。
当我将它们读入变量并打印出显示为['\\x1\\p1', '\\x2\\p2', '\\x3\\p3', ... etc.]
的字符串时。我知道变量在内部表示为'\x1\p1', ... etc.
,但是当它显示时会以双斜杠显示。
但现在我想在句子中搜索并替换此列表中的元素,即如果句子\x1\p1
中有"How are you doing \x1\p1"
,则将'\x1\p1'
替换为'Y'。但是替换方法在这种情况下不起作用!不知道为什么?
让我进一步解释一下:
我的文本文件(codes.txt
)包含以新行分隔的条目\xs1\x32
,\xs2\x54
。所以当我用
with open('codes') as codes:
code_list = codes.readlines()
接下来,我会说code_list_element_1 = code_list[1].rstrip()
当我打印code_list_element_1
时,它显示为'\\xs1\\x32'
接下来,让我将字符串定位为target_string = 'Hi! my name is \xs1\x32'
现在我想用target code_list_element_1
\xs1\x32
的{{1}}
所以,我尝试了'Y'
。我得到code_list_element_1 in target_string
接下来,我没有从文本文件中读取代码,而是初始化了变量False
现在,我尝试find_me = '\xs1\x32'
。我得到find_me in target_string
因此True
显示我想要的内容:target_string.replace(find_me,"Y")
答案 0 :(得分:4)
您正在查看可以粘贴回Python的字符串表示形式;反斜杠加倍,以确保值不被解释为转义序列(例如\n
,表示换行符,或\xfe
,表示值为254的字节,十六进制FE。
如果要构建 new 字符串值,还需要使用这些加倍的反斜杠来阻止Python看到没有的转义序列,或使用原始字符串文字:
>>> '\\x1\\p1'
'\\x1\\p1'
>>> r'\x1\p1'
'\\x1\\p1'
对于此特定示例,未正确处理反斜杠实际上会导致异常:
>>> '\x1\p1'
ValueError: invalid \x escape
因为Python希望在\x
转义后找到两个十六进制数字。
答案 1 :(得分:2)
原始字符串(前缀为r
的字符串对反斜杠非常有用。
In [9]: a=r"How are you doing \x1\p1"
In [10]: a
Out[10]: 'How are you doing \\x1\\p1'
In [11]: a.replace(r'\x1\p1', 'Y')
Out[11]: 'How are you doing Y'
In [12]: