Regex: вставить функцию с собой и аргументами и добавить новую строку с теми же параметрами - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть вопрос относительно Regex в Python 3: я использую Python для манипулирования кодом в модулях VBA. Я хочу написать программу Python, чтобы я мог "собрать" входные данные в моих подмодулях VBA следующим образом:

Текст выглядит сейчас примерно так и может рассматриваться как строка:

Call myfunction1(1,2,3)
Call myfunction2(4,5,6)

Мне нужно регулярное выражение, которое вставляет новую строку и добавляет мою функцию коллектора с теми же входами, что приводит к чему-то вроде этого, без перезаписи каких-либо строк:

Call myfunction1(1,2,3)
Call Collector(1,2,3)
Call myfunction2(4,5,6)
Call Collector(4,5,6)

Сборщик - это просто VBA sub который собирает мои данные. Как использовать регулярное выражение, чтобы я мог добавить новую строку с коллектором и сохранить исходную строку ввода между ними?

Я был бы очень рад получить ответы!

1 Ответ

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

Хорошо, вот простой способ сделать это:

def convert(s):
    pattern = re.compile(r'^Call myfunction\d+(\(.*\))$')
    result = []
    for line in s.splitlines():
        match = re.match(pattern, line)
        result.append(line)
        if match:
            result.append(f'Call Collector{match.group(1)}')
    return '\r\n'.join(result)

Вы можете адаптировать регулярное выражение, если у вас есть более или менее строгие требования к вызовам функций (например, больше пробелов, комментарии и c) .). Это предполагает, что у вас есть строка только с этим вызовом функции, имя функции заканчивается произвольным числом, и все, что находится в скобках, считается параметрами и копируется в функцию Collect.

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