1

我有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{{a它似乎只对第一个进行操作{而完全忽略了以下{

一个更明显的例子是大量的{{{{{{{{{{{{. 我的正则表达式替换返回:{ {{ {{ {{ {{ {{ {. 这显然跳过了紧密嵌套的所有其他字符{

他们为什么要跳过?任何有助于解开这种混乱的帮助将不胜感激!

PS我很抱歉所有强烈希望关闭所有打开的花括号的人。

4

3 回答 3

4

我会使用负面的回顾:

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

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

于 2013-01-30T02:50:55.383 回答
2

他们正在跳过,因为您的正则表达式正在使用两个字符:[^\ ]{. 您需要对前面的空间使用 0 宽度的负向后查看,以免消耗它:(?!<\s){. 然后你可以用 替换它" {",没有 lambda 的麻烦。

于 2013-01-30T02:50:30.733 回答
1

我希望这能解决问题:

re.sub (' *{', ' {', test_case)
于 2013-01-30T02:49:31.863 回答