Vim Regexes для соответствия классов, методов или функций - PullRequest
0 голосов
/ 13 января 2011

В настоящее время я занимаюсь разработкой / обновлением плагина 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 моим мягким регулярным выражениям, чтобы они немного лучше соответствовали друг другу, но не стали слишком строгими?"

Бонусные баллы , если вы оставите очень волшебные флаги в своем ответе!

1 Ответ

4 голосов
/ 13 января 2011

Как-то так может помочь, я не питон и не эксперт по VIM.

\v^\s*def\s+(\w+)\s*\(\s*(self[^)]*)\)\s*:

\v           # very magic
^            # start of line
   \s*       # 0 or more whitespace
   def       # 'def'
   \s+       # 1 or more whitespace
   (         # start capture group 1
      \w+       # 1 or more word [a-zA-Z0-9_] chars
   )         # end capture group 1
   \s*       # 0 or more whitespace
   \(        # '(' literal open parenthesis
   \s*       # 0 or more whitespace
   (         # start capture group 2
      self   # 'self'
      [^)]*     # 0 or more of not ')', includes newline
   )         # end capture group 2
   \)        # ')' literal close parenthesis
   \s*       # 0 or more whitespace
   :         # ':'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...