python + postgresql: преобразование строкового литерала в регулярное выражение - PullRequest
0 голосов
/ 24 марта 2011

Я хочу выполнить запрос, в котором я сопоставляю имя столбца, используя регулярное выражение для моей переменной, s.s является строковым литералом и может содержать такие вещи, как ?, *, . и т. Д. Я хочу преобразовать s, чтобы ? превратился в .{0,3}, чтобы все его оставшиесяСимволы регулярного выражения остаются литералами, а затем добавляют .* в конец.примеры:

Hi -> Hi.*
Fo?ar -> Fo.{0,3}ar.*
F.a*rx -> F\.a\*rx.*
F.a?*rx -> F\.a.{0,3}\*rx

Какой лучший способ сделать это?В основном я не уверен, как заключить строковый литерал в кавычки, чтобы символы регулярного выражения не интерпретировались как символы регулярного выражения (например, . -> \.).

Ответы [ 2 ]

3 голосов
/ 24 марта 2011
print '.{0,3}'.join(re.escape(part) for part in s.split('?')) + '.*'
1 голос
/ 24 марта 2011

Используйте метод re.escape(string).

Какие состояния:

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

Посетите страницу re module.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...