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

问题描述 投票:1回答:1

我有一些文本格式如下:

line01
   line01.01
   line01.02
      line01.02.01
      line01.02.01

但我需要它

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

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

regex notepad++ indentation brackets
1个回答
1
投票

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

The Process

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

找到:(三个空格字符)

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

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

找到什么:(^\s*+)(.*?)((?=($(?!\r\n)|\r\n)(?!\1 )))

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

接下来,找到所有具有子项的行,并在一组括号中围绕该行及其整个子组:

找到什么:(^\s*+)(([^(].*?)(\r\n\1\s+.*)+)

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

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

找到什么:([()])\s+([()])

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

Example

样本输入:

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))))
© www.soinside.com 2019 - 2024. All rights reserved.