В настоящее время я занимаюсь разработкой / обновлением плагина VIM, который использует множество регулярных выражений VIM для соответствия классу / методу / функции в Python
Моей отправной точкой было повторное использование того, что я мог найти, в данном случае это то, что я использовал:
Соответствует классу
"^\\s.*class\\s\\+[a-zA-Z0-9_]\\+"
"\ . "\\s*\\((\\([a-zA-Z0-9_,. \\t\\n]\\)*)\\)\\=\\s*:"
Соответствует методу
"^\\s*.def\\s\\+[a-zA-Z0-9_]\\+\\s*(\\s*self\\_[^:#]*)\\s*:"
Соответствует функции
"^\\s*def\\s\\+[a-zA-Z0-9_]\\+\\s*(\\_[^:#]*)\\s*:"
Тем не менее, вышеприведенное доказывает путь к строгому и не соответствует в определенных ситуациях (например, если вы запускаете метод и продолжаете в новой строке после "(").
Итак, после долгих споров я решил расслабить свои RegExes, и вот что я сейчас использую:
Класс:
'\v^(.*class )'
Метод:
'\v^(.*def)&(.*self)'
Функция:
'\v^(.*def )&(.*self)@!'
Пока все хорошо, но я думаю, что потерял баланс регулярных выражений: теперь это способ снисхождения.
Вопрос будет:
"Не могли бы вы рассказать немного об опыте RegEx моим мягким регулярным выражениям, чтобы они немного лучше соответствовали друг другу, но не стали слишком строгими?"
Бонусные баллы , если вы оставите очень волшебные флаги в своем ответе!