Regex 行层次结构使用记事本中的括号缩进到层次结构++;

Regex 行层次结构使用记事本中的括号缩进到层次结构++;,regex,notepad++,indentation,brackets,Regex,Notepad++,Indentation,Brackets,我有一些文本的格式如下: line01 line01.01 line01.02 line01.02.01 line01.02.01 但我需要像这样 (line01(line01.01)(line01.02(line01.02.01)(line01.02.01))) 有没有一种方法可以使用文本编辑器以这种方式将缩进更改为括号?您可以使用记事本++正则表达式查找和替换功能,只需几个独特的替换即可完成此任务。在“替换”对话框中,确保将搜索模式设置为“正则表达式”

我有一些文本的格式如下:

line01
   line01.01
   line01.02
      line01.02.01
      line01.02.01
但我需要像这样

(line01(line01.01)(line01.02(line01.02.01)(line01.02.01)))

有没有一种方法可以使用文本编辑器以这种方式将缩进更改为括号?

您可以使用记事本++正则表达式查找和替换功能,只需几个独特的替换即可完成此任务。在“替换”对话框中,确保将搜索模式设置为“正则表达式”,并取消选中“.matches newline”旁边的框

过程 首先将每个缩进减少到一个空格。在您给出的示例中,一个缩进等于三个空格,因此您可以首先搜索三个空格的所有实例,并将其替换为一个空格:

查找内容:
(三个空格字符)

替换为:
(单个空格字符)(使用“全部替换”按钮一次)

接下来,找到所有没有任何子项的行,并在其周围加上括号:

查找内容:
(^\s*+)(.*)((?=($(?!\r\n)|\r\n)(?!\1))

替换为:
$1\($2\)
(使用“全部替换”按钮一次)

接下来,查找所有具有子项的行,并将该行及其整个子项组用一组括号括起来:

查找内容:
(^\s*+)([^(].*)(\r\n\1\s+.*)+)

替换为:
$1\($2\)
(使用“全部替换”按钮,直到找不到任何匹配项为止)

最后,最后一步是删除括号之间的所有空格,以便最终输出看起来像示例输出:

查找内容:
([()])\s+([()])

替换为:
$1$2
(使用“全部替换”按钮直到找不到任何匹配项)

例子 样本输入:

line01
   line01.01
   line01.02
   line01.03
   line01.04
      line01.04.01
      line01.04.02
      line01.04.03
      line01.04.04
   line01.05
   line01.06
      line01.06.01
      line01.06.02
line02
   line02.01
      line02.01.01
line03
line04
line05
line06
   line06.01
      line06.01.01
         line06.01.01.01
         line06.01.01.02
输出(删除所有空格之前):

输出(删除所有空格后):


为什么你必须使用记事本+?如果有更好的解决方案,我也可以使用其他程序。所有缩进都是三个空格的倍数吗?还是有制表符?
(line01
 (line01.01)
 (line01.02)
 (line01.03)
 (line01.04
  (line01.04.01)
  (line01.04.02)
  (line01.04.03)
  (line01.04.04))
 (line01.05)
 (line01.06
  (line01.06.01)
  (line01.06.02)))
(line02
 (line02.01
  (line02.01.01)))
(line03)
(line04)
(line05)
(line06
 (line06.01
  (line06.01.01
   (line06.01.01.01)
   (line06.01.01.02))))
(line01(line01.01)(line01.02)(line01.03)(line01.04(line01.04.01)(line01.04.02)(line01.04.03)(line01.04.04))(line01.05)(line01.06(line01.06.01)(line01.06.02)))(line02(line02.01(line02.01.01)))(line03)(line04)(line05)(line06(line06.01(line06.01.01(line06.01.01.01)(line06.01.01.02))))