Escape special characters in a Python string Escape special characters in a Python string python python

Escape special characters in a Python string


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.


I'm surprised no one has mentioned using regular expressions via re.sub():

import reprint 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 escapethat as well.
  • Put parentheses around the search pattern, e.g. ([\"]), so that the substitutionpattern can use the found character when it adds \ in front of it. (That's what\1 does: uses the value of the first parenthesized group.)
  • The r in front of r'([\"])' means it's a raw string. Raw strings use differentrules for escaping backslashes. To write ([\"]) as a plain string, you'd need todouble all the backslashes and write '([\\"])'. Raw strings are friendlier whenyou're writing regular expressions.
  • In the substitution pattern, you need to escape \ to distinguish it from abackslash that precedes a substitution group, e.g. \1, hence r'\\\1'. To writethat as a plain string, you'd need '\\\\\\1' — and nobody wants that.


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 xI'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" :\\'