When replacing a substring from a string, I expect the backslash (
\) to stay untouched.
test1 = "This is a \ test String?" test1.replace("?", "!") 'This is a \\ test String!' test2 = "This is a '\' test String?" test2.replace("?", "!") "This is a '' test String!"
What I expect is "
This is a \ test String!" or "
This is a '\' test String!" respectively. How can I achieve that?
First case, you’re getting the representation not the string value. that’s a classic explained for instance here: Python prints two backslash instead of one
Second case, you’re escaping the quote unwillingly. Use raw string prefix in all cases (specially treacherous with Windows hardcoded paths where
test2 = r"This is a '\' test String?"
In the first case, it "works" because
\ doesn’t escape anything (for a complete list of escape sequences, check here), but I would not count too much on that in the general case. That raw prefix doesn’t hurt either:
test1 = r"This is a \ test String?"