Я сталкиваюсь с геркулесовой задачей в многострочном поиске и замене (объяснено в отдельных частях).
Решение я ищу включает в себя использование регулярных выражений в Notepad++ либо встроенный Find & Replace или с поиском многострочного и заменить диалог доступен на NPPtoolbucket плагин.
Это пример извлечения входного файла:
ALPHA('Hello John')
IGNORE111
IGNORE222
BETA('Hi Mary')
Мне нужно заменить Привет Мэри (четвертая строка) на Привет Джон (контент извлекается из первой строки). т.е. фактический контент в четвертой строке между BETA ('и') должен быть заменен контентом, полученным между ALPHA ('и') из первой строки.
Желаемый результат должен быть:
ALPHA('Hello John')
IGNORE111
IGNORE222
BETA('Hello John')
Проблема, с которой я сталкиваюсь, заключается в том, что у меня 47 файлов IFC (по 12000 строк в каждом). Эти файлы имеют имя сборки в первой строке (уникальное для каждого файла IFC), и его необходимо использовать для замены содержимого где-то в строках 48, 87 и во многих других строках во всех 47 файлах IFC. Все идет по определенному шаблону. Можете ли вы предложить какой-нибудь трюк для достижения этого с помощью регулярных выражений?
Скажи как - найти с помощью (ALPHA\(')(.*)(')(NEW_SYNTAX_I_SEEKING)(BETA\(')(.*)(')
и заменить на \1\2\3\4\5\2\7
где
(ALPHA\(')
станет ref \1
(.*)
будет возвращен ref \2
, он будет разделен как -> Hello John
(')
вернется ref \3
(NEW_SYNTAX_I'M_SEEKING) вернется назад ref \4
; это будет новый синтаксис регулярных выражений, который я ищу, который будет извлекать контент, распределенный по нескольким строкам, и тот, который я не хочу никаких изменений
(BETA\(')
станет ref \5
(.*)
станет back ref \6
, он будет разделен как -> Привет, Мэри, поэтому мы можем использовать back ref \
2 для замены back ref \6
.
(')
вернется ref \7
Надеюсь, я правильно сформулировал свой вопрос и намерение. Я высоко ценю любую помощь, оказанную.
Ура, JJ