(Notepad++) Exclua o texto entre colchetes, mas não de todos os colchetes

(Notepad++) Exclua o texto entre colchetes, mas não de todos os colchetes

Então eu posteiuma pergunta anteriore fui atendido pelo usuário Dmytro Dzyubak, tudo funcionou, mas agora estou tentando fazer funcionar mais rápido. Mais detalhes abaixo.

Antes:

SkinMesh
{
    skin = "Art/Models/Effects/enviro_effects/misc/blood_orb/BloodOrb.sm"
}

SoundEvents
{
    soundbank = "_Effects_misc_blood_orbs.bank"
    animation = "enter"
        0 = "Audio/Sound Effects/Misc/BloodOrb/Start_$(#).ogg@2 120 0 0.1 0.1 0 -1 0 1 1"
    animation = "exit"
        0 = "Audio/Sound Effects/Misc/BloodOrb/End_$(#)[email protected] 115 0 0 0 0 -1 0 1 1"
    animation = "idle"
        0 = "Audio/Sound Effects/Misc/BloodOrb/Orb_$(#)[email protected] 115 0 0 0 0 -1 0 10 4.5"
}

BoneGroups
{
    bone_group = "mid false mid jnt_orb_01 "
    bone_group = "cyl false mid cyl "
    bone_group = "explode false jnt_orb_01 up_explode "
    bone_group = "explodecyl false jnt_orb_01 cyl_explode1 "
    bone_group = "midparticle false mini_orb1 mini_orb_particleup_02 "
}

Como você pode ver, há vários colchetes. É possível excluir apenas o texto dentro de:

SkinMesh
{
    skin = "Art/Models/Effects/enviro_effects/misc/blood_orb/BloodOrb.sm"
}

e

SoundEvents
{
    soundbank = "_Effects_misc_blood_orbs.bank"
    animation = "enter"
        0 = "Audio/Sound Effects/Misc/BloodOrb/Start_$(#).ogg@2 120 0 0.1 0.1 0 -1 0 1 1"
    animation = "exit"
        0 = "Audio/Sound Effects/Misc/BloodOrb/End_$(#)[email protected] 115 0 0 0 0 -1 0 1 1"
    animation = "idle"
        0 = "Audio/Sound Effects/Misc/BloodOrb/Orb_$(#)[email protected] 115 0 0 0 0 -1 0 10 4.5"
}

e deixar BoneGroups intocados?

Aqui está um exemplo de como deve ser:

SkinMesh
{
}

SoundEvents
{
}

BoneGroups
{
    bone_group = "mid false mid jnt_orb_01 "
    bone_group = "cyl false mid cyl "
    bone_group = "explode false jnt_orb_01 up_explode "
    bone_group = "explodecyl false jnt_orb_01 cyl_explode1 "
    bone_group = "midparticle false mini_orb1 mini_orb_particleup_02 "
}

Responder1

  • Ctrl+H
  • Encontre o que:\b(?:SkinMesh|SoundEvents)\s+\{\K.+?(?=\})
  • Substituir com:\n
  • verifique Caso de correspondência
  • confira Envolver
  • verifique expressão regular
  • VERIFICAR. matches newline
  • Replace all

Explicação:

\b                  # word boundary
(?:                 # start non capture group
    SkinMesh        # literally "SkinMesh"
  |                 # OR
    SoundEvents     # literally "SoundEvents"
)                   # end group
\s+                 # 1 or more any spaces (including linebreak)
\{                  # openning curly bracket
\K                  # forget all we have seen until this position
.+?                 # 1 or more any characters including linebreak
(?=\})              # positive lookahead, make sure we have a closing curly bracket after.

Substituição:

\n      # linefeed, you may use \r\n

Resultado para determinado exemplo:

SkinMesh
{
}

SoundEvents
{
}

BoneGroups
{
    bone_group = "mid false mid jnt_orb_01 "
    bone_group = "cyl false mid cyl "
    bone_group = "explode false jnt_orb_01 up_explode "
    bone_group = "explodecyl false jnt_orb_01 cyl_explode1 "
    bone_group = "midparticle false mini_orb1 mini_orb_particleup_02 "
}

Captura de tela:

insira a descrição da imagem aqui

Responder2

Não ganharei nenhum RegEx Golf com esta resposta, mas funciona.

Usando as diretrizes emResposta de Dmytro Dzyubak(ou seja, pesquise no modo RegEx com ".corresponde à nova linha" marcado), faça as seguintes alterações:

Localizar: ^(S[^\r\n]+)(\r?\n?)\{(.*?)\}
Substituir:\1\2\{\2\}

Informação:
Agora garante que a linha que precede os colchetes comece com S maiúsculo.
Ele também captura o final da linha e o substitui (para que você não termine com finais de linha mistos).
\1e \2na expressão Substituir consulte os grupos de parênteses na expressão Localizar.

informação relacionada