Что лучше всего подходит для экранирования специальных символов из строки python?

У меня есть термин поиска, с которым я использую re.search (), и я хотел бы знать, что является лучшим способом избежать символов из строки (например, (), [], \ /, {}), так что мое регулярное выражение интерпретирует его правильно.

В настоящее время я делаю следующее

searchString.replace('\\', '\\\\').replace(')','\)').replace('(','\(') 

Есть ли что-нибудь для этого, или есть лучше, кроме явного вызова замены на каждом специальном символе, который мне нужно убежать?

Функция re.escape делает это для вас.

 >>> import re >>> re.escape('escape this. /') 'escape\\ this\\.\\ \\/' >>> >>> re.escape('www.stackoverflow.com') 'www\\.stackoverflow\\.com' 

Как говорится в документации:

Возвращаемая строка со всеми неалфавитными спицами; это полезно, если вы хотите совместить произвольную литеральную строку, которая может содержать метасимволы регулярного выражения.

Используйте необработанные строки.

Из документов на необработанных строках:

Когда присутствует префикс «r» или «R», символ, следующий за обратным слэшем, включается в строку без изменений, и все обратные косые черты остаются в строке. Например, строковый литерал r "\ n" состоит из двух символов: обратная косая черта и строчная буква "n". Кавычки строк могут быть экранированы с обратной косой чертой, но обратная косая черта остается в строке; например, r "\" "является допустимым строковым литералом, состоящим из двух символов: обратная косая черта и двойная кавычка; r" \ "не является допустимым строковым литералом (даже необработанная строка не может заканчиваться нечетным числом обратных косых черт). В частности, необработанная строка не может заканчиваться одним обратным слэшем (поскольку обратная косая черта избегает следующего символа кавычки). Обратите также внимание, что одна обратная косая черта, сопровождаемая новой строкой, интерпретируется как эти два символа как часть строки, а не как продолжение строки ,

Используйте нотную строчную нотацию Python. С http://docs.python.org/library/re.html :

Регулярные выражения используют символ обратной косой черты ('\'), чтобы указать специальные формы или разрешить использование специальных символов без использования их специального значения. Это сталкивается с использованием Python одного и того же символа для той же цели в строковых литералах; например, чтобы соответствовать буквальной обратной косой чертой, нужно было бы написать «\\» в качестве строки шаблона, потому что регулярное выражение должно быть \, и каждый обратный слэш должен быть выражен как \ внутри обычного строкового литерала Python.

Решение состоит в использовании нотной строки Python для регулярных выражений; обратная косая черта не обрабатывается каким-либо особым образом в строковом литерале с префиксом «r». Таким образом, r "\ n" представляет собой двухсимвольную строку, содержащую '\' и 'n', а "\ n" – односимвольная строка, содержащая новую строку. Обычно шаблоны будут выражаться в коде Python с использованием этой необработанной строковой нотации.