Я пытаюсь написать функцию Python, которая заменяет экземпляры текста, окруженные фигурными фигурными скобками, содержимым фигурных скобок, оставляя только пустые пары фигурных скобок. Например:Python regex - Заменить текст в скобках с содержимым скобок
foo {} bar {baz}
будет foo {} bar baz
.
Образец, который я создал, соответствует {[^{}]+}
, то есть текст, который не содержит фигурных скобок (для предотвращения совпадений совпадений), окруженных набором фигурных скобок.
Очевидное решение состоит в использовании re.sub
с моим рисунком, и я обнаружил, что я могу ссылаться на совпавший текст с \g<0>
:
>>> re.sub("{[^{}]+}", "A \g<0> B", "foo {} bar {baz}")
'foo {} bar A {baz} B'
Так что это не проблема. Тем не менее, я зациклился на том, как обрезать скобки из ссылочного текста. Если я пытаюсь применять диапазон для замены строки:
>>> re.sub("{[^{}]+}", "\g<0>"[1:-1], "foo{}bar{baz}")
'foo{}barg<0'
Диапазон применяется до \g<0>
разрешен к совпавшего текста, и обрезает ведущий \
и замыкающие >
, оставив только g<0
, который не имеет никакого специального имея в виду.
Я также попытался определить функцию для выполнения кадрирования:
def trimBraces(string):
return string[1:-1]
Но, неудивительно, что ничего не изменилось.
>>> re.sub("{[^{}]+}", trimBraces("\g<0>"), "foo{}bar{baz}")
'foo{}barg<0'
Что мне здесь не хватает? Спасибо заранее.
Простой, работает. Спасибо! – halbrd