我有一些文本格式如下:
line01
line01.01
line01.02
line01.02.01
line01.02.01
但我需要它
(line01(line01.01)(line01.02(line01.02.01)(line01.02.01)))
有没有办法使用文本编辑器以这种方式将缩进更改为括号?
您可以使用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))))