Regex замени на лимит - PullRequest
       1

Regex замени на лимит

0 голосов
/ 04 января 2019

Я пытаюсь заменить LIMIT X в конце строки.Вот что у меня сейчас есть:

>>> re.sub(r'limit\s{1,}(\d{1,})\s+?$', '20', 'select * from entity limit 1000\r\n', flags=re.IGNORECASE)
'select * from entity limit 1000'

Однако, похоже, я не получил правильное регулярное выражение.Что было бы правильным регулярным выражением здесь?Обратите внимание, что это легче сделать, выполнив str.split('limit') и перейдя оттуда, но для этого вопроса мне нужно использовать регулярное выражение.

Ответы [ 2 ]

0 голосов
/ 04 января 2019
>>> re.sub(r'(\s+limit)\s+(\d+)\s+?$', r"\1 20" , 'select * from entity limit 1000\r\n', flags=re.IGNORECASE)
'select * from entity limit 20\n'

Протестировано в соответствии с пунктами 2.7.13 и 3.7.2.
\1 - для ссылки на совпадающую часть " limit", важна r до "\1 20".
Пожалуйста, оставьте комментарий, еслиУ вас все еще есть проблема.
(И, пожалуйста, укажите вашу версию системы и Python и т. д.)

0 голосов
/ 04 января 2019

Обращаясь за помощью, всегда не забывайте четко указывать, что вы пытаетесь сделать, предоставьте подробную информацию и минимальный пример .

Я предполагаю, что выу вас есть набор запросов, и вы хотите снять ограничение, чтобы запросы возвращали полный результат, и вы хотите сохранить пробелы в конце (это может быть важно для выполнения вашего запроса).

Aрабочий пример, который я тестировал в python 2.7.15rc1 и 3.6.6:

import re
query = 'select * from entity limit 1000\r\n'
regex = r'\s+limit\s+\d+(\s*)$'
replacement = '\\1'
re.sub(regex, replacement, query, flags=re.IGNORECASE)

Ошибка в вашем регулярном выражении состоит в том, что у вас есть дополнительный квантификатор (?) позади другого квантификатора (+)), но квантификатору должен предшествовать атом.

Вы также можете заменить ненужные квантификаторы {1,} на эквивалентную форму +.

Замена, которую я использовал в примере\\1 - это группа, захваченная в регулярном выражении (та, что в скобках).

Я также добавил обязательный разделитель пробелов перед инструкцией, чтобы результат выглядел более отшлифованным.

ВыМожно узнать о регулярных выражениях для python3 и python2 (глава 7).

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