用缩进的文本块替换特定的文本块

时间:2019-05-15 03:01:11

标签: regex atom-editor

我正在使用Atom文本编辑器,尽管我很高兴切换到任何支持正则表达式查找和替换的程序。

我的目标是:

搜索包含单词

的任何文本行
*group: 

并替换为

*page 
    *group: 

*group*page后面带有制表符的位置。然后,我需要将所有直接位于组下的内容也都“分页”。

一种可能是在Atom中执行以下操作:

查找:\*group:(.*)

替换:*page\n\t\t*group:$1

但是,这是有问题的,因为它会产生如下所示的块:

*page
    *group: GROUP1
    *question: TEXT QUESTIONS
        *shuffle
        ANSWER CHOICE 1
        ANSWER CHOICE 2
        *save: var_1
        *throwaway
    >> GROUP1_answer = "ANSWER CHOICE 1"

但是我需要像这样缩进“组”下的所有内容

*page
    *group: GROUP1
        *question: TEXT QUESTIONS
            *shuffle
            ANSWER CHOICE 1
            ANSWER CHOICE 2
            *save: var_1
            *throwaway
        >> GROUP1_answer = "ANSWER CHOICE 1"

关于如何执行此操作的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以使用记事本++分两步进行操作。

1-在*page之前添加*group

2-在未以*page开头的每一行之前添加一个制表符(使用正则表达式的否定先行)

第1步:

  • 在记事本++中,按CTRL + H

  • 在字段Find what:中输入以下格式:(\*group:(((?!\*group).)*))

  • 在字段Replace with:中输入以下格式:*page\n$1

  • Alt + A

现在,您在每个*page之前添加*group

结果:

*page
*group: GROUP1
    *question: TEXT QUESTIONS
        *shuffle
        ANSWER CHOICE 1
        ANSWER CHOICE 2
        *save: var_1
        *throwaway
    >> GROUP1_answer = "ANSWER CHOICE 1"
*page
*group: GROUP1
    *question: TEXT QUESTIONS
        *shuffle
        ANSWER CHOICE 1
        ANSWER CHOICE 2
        *save: var_1
        *throwaway
    >> GROUP1_answer = "ANSWER CHOICE 1"

第2步:

  • 在记事本++中再次按CTRL + H

  • 在字段Find what:中输入以下格式:(^((?!\*page.*$).*))

  • 在字段Replace with:中输入以下格式:\t$1

  • Alt + A

结果:

*page
    *group: GROUP1
        *question: TEXT QUESTIONS
            *shuffle
            ANSWER CHOICE 1
            ANSWER CHOICE 2
            *save: var_1
            *throwaway
        >> GROUP1_answer = "ANSWER CHOICE 1"
*page
    *group: GROUP1
        *question: TEXT QUESTIONS
            *shuffle
            ANSWER CHOICE 1
            ANSWER CHOICE 2
            *save: var_1
            *throwaway
        >> GROUP1_answer = "ANSWER CHOICE 1"

通过这种方式,制表符将位于所有未以*page开头的行之前。

只需确保未选中matches newline选项。