как передать объект соответствия из re.sub в качестве аргумента - PullRequest
0 голосов
/ 31 мая 2019

Я использую re.sub для поиска шаблона и замены совпадений, причем замена является условной в зависимости от совпадения.Как передать совпадение в качестве аргумента?python-3.7

Я успешно прошел 'match', если я использую следующее:

string = re.sub(r"{(.*?)}", replaceVar, string)

Но этот метод не позволяет мне передавать дополнительные аргументы, что мне и нужноделать.

import re

def matchVar(match, another_argument):
    if match.group(1) == another_argument:
        return f'{{{another_argument}}}'
    else:
        return f'{{{another_argument}[{match.group(1)}]}}'

def replaceVar(string, another_argument):
    string = re.sub(r"{(.*?)}", matchVar(match, another_argument), string)
    return string

string = 'This is a {x} sentence. This is another {y} sentence.'
another_argument = 'x'
string = replaceVar(string, another_argument)
print(string)

Строка должна привести к

'This is a {x} sentence. This is another {x[y]} sentence.'

Но вместо этого я получаю сообщение об ошибке «NameError: имя« match »не определено».

(Я понимаю, что «match» не определено. Я не уверен, как определить «match».)

Как передать «match» в качестве аргумента?Спасибо!

1 Ответ

1 голос
/ 31 мая 2019

Вы должны использовать лямбду и пройти матч

string = re.sub(r"{(.*?)}", lambda match :matchVar(match, another_argument), string)

Или измените matchVar на def matchVar(match): и передать функцию как re.sub(r"{(.*?)}", matchVar, string)

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