Как использовать регулярное выражение для поиска операторов с заглавными буквами - PullRequest
0 голосов
/ 07 марта 2019

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

Пример 1

def Foobar(arg1: expression, 
           arg2: expression, 
           *args: expression, 
           **kwargs: expression)->expression:

Пример 2

def foobar(arg1: expression, 
           Arg2: expression, 
           *args: expression, 
           **kwargs: expression)->expression:

Поскольку в утверждении может быть несколько :, я думаю, что это, вероятно, очень сложно. Как я могу это сделать, если мы можем предположить, что нет аннотации. Например.,

def foobar(arg1, 
           Arg2, 
           *args, 
           **kwargs):

Ответы [ 2 ]

1 голос
/ 07 марта 2019

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

import re

regex = r"def (?P<func_name_and_args>\w*\(.+?\))"

with open(/path/to/file/, 'r') as test_file:
    lines = test_file.readlines()

    matches = re.finditer(regex, lines, re.DOTALL | re.MULTILINE)
    for match in matches:
        group = match.group('func_name_and_args')
        if any(char != char.lower() for char in group):
            print(group)

Вы можете проверить это с: https://regex101.com/r/BMniq9/1

1 голос
/ 07 марта 2019

Немного грубо, но это должно сработать:

def [^A-Z]*[A-Z]+[^)]*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...