使用Notepad ++中的括号使用缩进到层次结构的行层次结构

时间:2017-12-25 00:09:12

标签: 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)))

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

1 个答案:

答案 0 :(得分:1)

您可以使用Notepad ++正则表达式查找和替换功能,只需几个独特的替换即可完成此任务。在"替换"对话,确保将搜索模式设置为"正则表达式"并取消勾选"旁边的框。匹配换行符"

流程

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

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

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

接下来,查找所有没有子项目的行并在其周围添加括号:

查找内容: (^\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))))