Regex заменяет элемент, если нет другого совпадения в той же строке и перед совпадением - PullRequest
0 голосов
/ 15 января 2020

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

Однако Я столкнулся с проблемой, когда входящий запрос содержит комментарий, подобный следующему:

)
  , wcr AS -- hello I am a comment that ends in a period.
(

, который затем форматирует его, как показано ниже, что приводит к сбою запроса.

)
  , wcr AS -- hello I am a comment that ends in a period.(

I не могу придумать ни одного регулярного выражения, которое бы выполняло правильную замену, которую я ищу, то есть заменил бы период, окруженный пробелом, периодом, не окруженным пробелом, только в том случае, если в той же строке нет -- предшествующего ..

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Это регулярное выражение найдет нужные вам строки и захватит их, если вы используете глобальный флаг g:

^  , wcr AS (?<!-- )([^\-]*)$

Пример: https://regex101.com/r/0LYWgo/1/

Я бы тогда использовал string replace на вашем любимом языке программирования, чтобы избавиться от пробелов вокруг точек.

0 голосов
/ 15 января 2020

Похоже, вы хотели заменить пробелы или табуляции, окружающие ., но не будете считать \n таким пробелом. \s - это все [ \t\n\r\f\v] в Python.

Вы можете заменить [ \t]*\.[ \t]* (ноль или более пробелов или символов табуляции с обеих сторон) только на .

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