(Notepad++) Удалить текст в скобках, но не из всех скобок

(Notepad++) Удалить текст в скобках, но не из всех скобок

Итак, я опубликовалвопрос ранееи получил ответ от пользователя Дмитрия Дзюбака, все работало, но теперь я пытаюсь заставить это работать быстрее. Подробнее ниже.

До:

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

Как видите, там куча скобок. Можно ли удалить только текст внутри:

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 нетронутым?

Вот пример того, как это должно выглядеть:

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

решение1

  • Ctrl+H
  • Найти то, что:\b(?:SkinMesh|SoundEvents)\s+\{\K.+?(?=\})
  • Заменить:\n
  • проверить Соответствие регистру
  • проверить Обернуть вокруг
  • проверить Регулярное выражение
  • ПРОВЕРЯТЬ. matches newline
  • Replace all

Объяснение:

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

Замена:

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

Результат для данного примера:

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

Скриншот:

введите описание изображения здесь

решение2

Я не выиграю ни одного RegEx Golf с этим ответом, но он работает.

Используя рекомендации вОтвет Дмитрия Дзюбака(т.е. поиск в режиме RegEx с отмеченным «. matches newline»), внесите следующие изменения:

Найти: ^(S[^\r\n]+)(\r?\n?)\{(.*?)\}
Заменить:\1\2\{\2\}

Информация:
Теперь он гарантирует, что строка, предшествующая скобкам, начинается с заглавной буквы S.
Он также улавливает окончание строки и заменяет его (чтобы не было смешанных окончаний строк).
\1и \2в выражении Replace ссылайтесь на группы скобок в выражении Find.

Связанный контент