与re.sub。混淆

时间:2013-01-30 02:46:21

标签: python regex

我想要将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。我很抱歉那里有强烈的愿望关闭所有打开的大括号。

3 个答案:

答案 0 :(得分:4)

我会使用负面的背后隐藏:

re.sub(r'(?<!\s)(\{)',r' \1','{{{{{{')

基本上我们解析字符串直到我们点击{。如果前面的字符不是空格(即(?<!\s)位),则{匹配,我们将其替换为前面的空格。

答案 1 :(得分:2)

他们正在跳过,因为您的正则表达式占用了两个字符:[^\ ]{。您需要为前面的空格使用0宽度负向lookbehind,以便不使用它:(?!<\s){。然后你可以用" {"替换它,而不会有lambda麻烦。

答案 2 :(得分:1)

我希望这可以解决问题:

re.sub (' *{', ' {', test_case)