Итак, я опубликовалвопрос ранееи получил ответ от пользователя Дмитрия Дзюбака, все работало, но теперь я пытаюсь заставить это работать быстрее. Подробнее ниже.
До:
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.