我有一个字符串
"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"
有人可以指出我做错了什么吗?
答案 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'\\"'
。