Найти и заменить все вхождения, не заключенные в кавычки

#visual-studio-code

#visual-studio-code

Вопрос:

Я нахожусь в процессе рефакторинга своего кода на Python для использования обозначения подчеркивания, как описано в PEP8, и я использую инструмент поиска и замены VS Code. Проблема в том, что вхождения слов в кавычках также заменяются. Как я могу заменить все вхождения, которые не заключены в кавычки?

Пример:

 fooBar = df["fooBar"]
 

Требуется после поиска и замены

 foo_bar = df["fooBar"]
 

Комментарии:

1. вы выполняете рефакторинг переменных, устанавливаете курсор на переменную и нажимаете F2

2. Попробовав это, он смог изменить имя переменной, не меняя fooBar в кавычках, но не реорганизовал все остальные экземпляры. Есть ли способ заставить это работать со всеми другими экземплярами в документе одновременно?

3. если у вас есть правильный языковой сервер, он должен изменить все экземпляры переменной, если вы наведете курсор на имя переменной, он выделит другие экземпляры

Ответ №1:

Функции поиска VS Code поддерживают регулярные выражения, и вы можете использовать отрицательный шаблон lookbehind, чтобы найти «все строки fooBar, которым не предшествует кавычка«: (?<!")fooBar .

введите описание изображения здесь

(1) включает выражения регулярных выражений при поиске. Как вы можете видеть, это игнорирует все "fooBar" экземпляры. Затем вы также можете включить (2), чтобы он включал сопоставление всего слова (чтобы оно не совпадало с «fooBar123»).

В качестве примечания, я надеюсь, что у вас есть автоматические тесты, которые вы можете запустить после выполнения всех этих переименований 🙂

Ответ №2:

откройте инструмент поиска и замены vscode (ctrl f и ctrl h)

  1. выберите User Regular Expression(Alt R)
  2. выберите Match Case (Alt c)
  3. Найти = ([a-z]*)(?<!_)([A-Z])(?<!".*)
  4. Заменить = $1_L$2

наконец, нажмите Enter

найти и заменить

результат : результат