如何比较python中的反斜杠

时间:2013-10-29 18:00:16

标签: python python-2.7

我有一组从文件中读取的字符串['\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

替换target_string中应该是\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")

2 个答案:

答案 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]: