Regex: Как я могу сопоставить что-то, заключенное в определенные символы? - PullRequest
2 голосов
/ 02 февраля 2020

Я ищу способ выбрать и заменить определенную часть в моей строке, используя python re.sub.

Строка в моем случае будет

'SELECT * FROM contacts WHERE "id"=%user.id%;'

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

# having these
user = User(id=123)
'SELECT * FROM contacts WHERE "id"=%user.id%;'

# output should be
'SELECT * FROM contacts WHERE "id"=123;'

но также

# having these
user = User(id=123, name="John Smith")
'''SELECT * FROM contacts WHERE "name"=%user.name.lower().replace(" ", "_")%;'''

# output should be
'''SELECT * FROM contacts WHERE "name"='john_smith';'''

Я очень новичок в регулярных выражениях, поэтому я не знаю, как это сделать. Я попытался /%\w+/g, но это будет соответствовать %user вместо %user.id%. Что я могу сделать?

1 Ответ

2 голосов
/ 02 февраля 2020

Вы можете сделать:

re.sub(r'%([^%]*)%', lambda m: str(eval(m.group(1))), your_string)

Но я бы не рекомендовал это по крайней мере по двум причинам:

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