想要替换python3字符串中的反斜杠

时间:2016-07-29 14:48:10

标签: python regex python-3.x

我有一个字符串

"abc INC\","None", "0", "test"

从这个字符串开始,我希望在"之前出现时替换任何出现的反斜杠。用管子。我写了下面的代码,但它实际上取出了"然后离开\后面。

import re
str = "\"abc INC\\\",\"None\", \"0\", \"test\""
str = re.sub("(\\\")", "|", str)
print(str)

Output: |abc INC\|,|None|, |0|, |test|
Desired Output: "abc INC|","None", "0", "test"

有人可以指出我做错了什么吗?

4 个答案:

答案 0 :(得分:2)

见Jamie Zawinksi的famous quote about regular expressions。尽量在必要时尽量使用re。在这种情况下,它不是。

字符串str的实际内容(顺便说一句,变量名称不好,因为那里有该名称的内置类型)

"abc INC\","None", "0", "test"

为什么不

str.replace('\\"', '|"')

这将完全符合您的要求。

答案 1 :(得分:0)

您可以使用以下肯定前瞻断言'\\(?=")'

import re

my_str = "\"abc INC\\\",\"None\", \"0\", \"test\""
p = re.sub(r'\\(?=")', '|', my_str)
print(p)
# '"abc INC|","None", "0", "test"'

尽量不要使用内置名称作为变量的名称,即。 str,以避免阴影内置。

答案 2 :(得分:0)

这必须解决您的问题:

import re
s = "\"abc INC\\\",\"None\", \"0\", \"test\""
s = re.sub(r"\\", "|", s)

也不要使用str作为变量名,它是一个保留关键字。

答案 3 :(得分:0)

对于python正则表达式中的文字反斜杠,您需要转义两次,为您提供模式'\\\\"'"\\\\\""。 python实际上需要第一次转义才能在字符串中加入反斜杠。但正则表达式模式本身使用反斜杠作为特殊字符(对于像\w单词字符等的东西)。 documentation州:

  

特殊序列包括' \'和下面列表中的一个字符。如果普通字符不在列表中,则生成的RE将匹配第二个字符。

因此模式\"将匹配单个",因为"不是具有特殊含义的字符。

您可以使用原始表示法仅转义一次:r'\\"'