我想要将aa{{{a {{ {aaa{
字符串转换为aa { { {a { { {aaa {
。基本上每个{
都必须有一个空格字符。
我目前正在使用的正则表达式替换函数是:re.sub(r'[^\ ]{', lambda x:x.group(0)[0]+' {', test_case)
该函数的结果是:aa {{ {a { { {aaa {
(关闭,但字符串中有{{
我的方法在a{a{a
等部分表现得非常好。但是,如果两个{
个字符在一起,就像a{{a
一样,它似乎只对第一个{
进行操作,并完全忽略了以下{
。
一个更清晰的例子是{{{{{{{{{{{{
的大型系列。我的正则表达式替换返回:{ {{ {{ {{ {{ {{ {
。在紧密嵌套{
的情况下,它明显会跳过其他所有字符。
为什么他们会跳过?任何帮助解决这种混乱的人都将不胜感激!
P.S。我很抱歉那里有强烈的愿望关闭所有打开的大括号。
答案 0 :(得分:4)
我会使用负面的背后隐藏:
re.sub(r'(?<!\s)(\{)',r' \1','{{{{{{')
基本上我们解析字符串直到我们点击{
。如果前面的字符不是空格(即(?<!\s)
位),则{
匹配,我们将其替换为前面的空格。
答案 1 :(得分:2)
他们正在跳过,因为您的正则表达式占用了两个字符:[^\ ]
和{
。您需要为前面的空格使用0宽度负向lookbehind,以便不使用它:(?!<\s){
。然后你可以用" {"
替换它,而不会有lambda麻烦。
答案 2 :(得分:1)
我希望这可以解决问题:
re.sub (' *{', ' {', test_case)