我正在尝试编写一个 Python 函数,用大括号的内容替换用大括号括起来的文本实例,同时保留空的大括号对。例如:
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'
我在这里缺少什么?提前谢谢了。