Я пишу скрипт python, в котором мне нужно заменить строки, окруженные кавычками, на символы подчеркивания, а количество символов подчеркивания должно быть равно длине строк. Вот что я пробовал:
>>> re.sub(r'"(.+?)"', (len(r"\1") * "_"), '"hellohello"')
'__'
Видимо, у меня там что-то не так. Ожидаемый результат для приведенного выше теста будет 10 символов подчеркивания, но я получил два. Есть идеи, где что-то пошло не так?
[РЕДАКТИРОВАТЬ] Я думаю, что r"\1" указывает на первое совпадение, потому что
>>> re.sub(r'"(.+?)"', r"\1"+ "pp", '"hellohello"')
'hellohellopp'
Здесь хорошо работает использование re.sub
с функцией обратного вызова:
inp = '"hellohello"'
output = re.sub(r'"(.*?)"', lambda m: '"' + re.sub(r'.', '_', m.group(1)) + '"', inp)
print(output) # "__________"
Хитрость здесь заключается в том, чтобы соответствовать "..."
, захватывая цитируемый контент в первой группе захвата. Затем мы заменяем каждый символ содержимого одним символом подчеркивания.
len(r'\1')
это не то, что вы думаете. Это длина необработанной строки \1
, которая всегда будет равна 2. Здесь вам нужен обратный вызов или другой двухэтапный подход.
Это круто. Спасибо. При этом, почему мое решение неверно? Он пытается сделать то же самое.