(Notepad++) Eliminar texto entre corchetes pero no de todos los corchetes

(Notepad++) Eliminar texto entre corchetes pero no de todos los corchetes

Así que publiquéuna pregunta antesy el usuario Dmytro Dzyubak me respondió, todo funcionó, pero ahora estoy intentando que funcione más rápido. Más detalles a continuación.

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 puede ver, hay muchos corchetes. ¿Es posible eliminar sólo el texto dentro de:

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

y

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"
}

¿Y dejar BoneGroups intactos?

Aquí hay un ejemplo de cómo debería verse:

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 "
}

Respuesta1

  • Ctrl+H
  • Encontrar que:\b(?:SkinMesh|SoundEvents)\s+\{\K.+?(?=\})
  • Reemplazar con:\n
  • comprobar caso de coincidencia
  • comprobar Envolver alrededor
  • comprobar expresión regular
  • CONTROLAR. matches newline
  • Replace all

Explicación:

\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.

Reemplazo:

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

Resultado para el ejemplo dado:

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 "
}

La captura de pantalla:

ingrese la descripción de la imagen aquí

Respuesta2

No ganaré ningún RegEx Golf con esta respuesta, pero funciona.

Usando las pautas enLa respuesta de Dmytro Dzyubak(es decir, buscar en modo RegEx con ". coincide con nueva línea" marcado), realice los siguientes cambios:

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

Información:
Ahora garantiza que la línea que precede a los corchetes comience con una S mayúscula.
También captura el final de línea y lo reemplaza (para que no termine con finales de línea mixtos).
\1y \2en la expresión Reemplazar, haga referencia a los grupos entre paréntesis en la expresión Buscar.

información relacionada