Escape special characters in a Python string
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Magical Minnie Puzzles
--
Chapters
00:00 Escape Special Characters In A Python String
00:21 Accepted Answer Score 263
00:53 Answer 2 Score 10
01:16 Answer 3 Score 23
02:38 Answer 4 Score 4
02:59 Thank you
--
Full question
https://stackoverflow.com/questions/4202...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #string #escaping
#avk47
ACCEPTED ANSWER
Score 263
Use re.escape
>>> import re
>>> re.escape(r'\ a.*$')
'\\\\\\ a\\.\\*\\$'
>>> print(re.escape(r'\ a.*$'))
\\\ a\.\*\$
>>> re.escape('www.stackoverflow.com')
'www\\.stackoverflow\\.com'
>>> print(re.escape('www.stackoverflow.com'))
www\.stackoverflow\.com
Repeating it here:
re.escape(string)
Return string with all non-alphanumerics backslashed; this is useful if you want to match an arbitrary literal string that may have regular expression metacharacters in it.
As of Python 3.7 re.escape() was changed to escape only characters which are meaningful to regex operations.
ANSWER 2
Score 23
I'm surprised no one has mentioned using regular expressions via re.sub():
import re
print re.sub(r'([\"])',    r'\\\1', 'it\'s "this"')  # it's \"this\"
print re.sub(r"([\'])",    r'\\\1', 'it\'s "this"')  # it\'s "this"
print re.sub(r'([\" \'])', r'\\\1', 'it\'s "this"')  # it\'s\ \"this\"
Important things to note:
- In the search pattern, include 
\as well as the character(s) you're looking for. You're going to be using\to escape your characters, so you need to escape that as well. - Put parentheses around the search pattern, e.g. 
([\"]), so that the substitution pattern can use the found character when it adds\in front of it. (That's what\1does: uses the value of the first parenthesized group.) - The 
rin front ofr'([\"])'means it's a raw string. Raw strings use different rules for escaping backslashes. To write([\"])as a plain string, you'd need to double all the backslashes and write'([\\"])'. Raw strings are friendlier when you're writing regular expressions. - In the substitution pattern, you need to escape 
\to distinguish it from a backslash that precedes a substitution group, e.g.\1, hencer'\\\1'. To write that as a plain string, you'd need'\\\\\\1'— and nobody wants that. 
ANSWER 3
Score 10
Use repr()[1:-1]. In this case, the double quotes don't need to be escaped. The [-1:1] slice is to remove the single quote from the beginning and the end.
>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck" :\
>>> print repr(x)[1:-1]
I\'m "stuck" :\\
Or maybe you just want to escape a phrase to paste into your program? If so, do this:
>>> raw_input()
I'm "stuck" :\
'I\'m "stuck" :\\'
ANSWER 4
Score 4
As it was mentioned above, the answer depends on your case. If you want to escape a string for a regular expression then you should use re.escape(). But if you want to escape a specific set of characters then use this lambda function:
>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)
>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck" :\
>>> print escape(s, "\\", ['"'])
I'm \"stuck\" :\\