我有一组从文件中读取的字符串 say ['\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()
Run Code Online (Sandbox Code Playgroud)
接下来,我确实可以说 code_list_element_1 = code_list[1].rstrip()
当我打印时code_list_element_1
,它显示为'\\xs1\\x32'
接下来,让我的目标字符串是 target_string = 'Hi! my name is \xs1\x32'
现在我想用 say替换code_list_element_1
应该\xs1\x32
在 target_string 中的那个'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")
显示我想要的:"Hi! my name is Y"
您正在查看可以粘贴回 Python 的字符串表示形式;反斜杠加倍以确保值不会被解释为转义序列(例如\n
,表示换行符,或\xfe
表示值为 254、十六进制 FE 的字节)。
如果您正在构建新的字符串值,您还需要使用那些双反斜杠来防止 Python 看到没有转义序列的转义序列,或者使用原始字符串文字:
>>> '\\x1\\p1'
'\\x1\\p1'
>>> r'\x1\p1'
'\\x1\\p1'
Run Code Online (Sandbox Code Playgroud)
对于此特定示例,未正确处理反斜杠实际上会导致异常:
>>> '\x1\p1'
ValueError: invalid \x escape
Run Code Online (Sandbox Code Playgroud)
因为 Python 期望在\x
转义后找到两个十六进制数字。
归档时间: |
|
查看次数: |
1580 次 |
最近记录: |