Проблема с вашим регулярным выражением заключается в использовании жадного сопоставления в (\d+\R)+
, особенно в последнем +
. Это гласит: «Сопоставьте эту группу столько раз, сколько сможете, пока это не приведет к пропаданию матча». Таким образом, для вашего текста он сжимается на 1, 2, 3 и 4, прежде чем он больше не может сожрать, и помещает последнее совпадение во вторую группу захвата. Очевидно, что движкам регулярных выражений свойственно быть неспособным выражать вариадические группы, как бы вы в них обратились? Таким образом, короткий ответ, я думаю, состоит в том, что регулярные выражения являются неподходящим инструментом для полностью автоматизированного процесса, и вам придется написать скрипт.
Однако, для немного менее автоматизированного процесса, который все еще включает окружающий текст, вы можете попробовать
find: (\w+\R)((?:\d+\R)+)(\w+)
replace: \1prefix\2\3
Мы обертываем вторую группу плюс ее жадный модификатор в дополнительный набор захватывающих паренов и заключаем соответствующий текст в не захватывающую группу. Теперь у нас есть полный набор цифр в их собственной группе и мы можем добавить префикс к первой. Интересным побочным эффектом этого является то, что первое число затем соответствует первой группе (\w+\R)
, и если вы снова запустите поиск / замену, оно попадет на следующее число в строке, пока не перестанет совпадать.
Таким образом, вы сможете просматривать свои файлы, по крайней мере, только в тех областях, к которым вы хотите добавить этот префикс, и это не займет почти столько же времени, как и поиск каждой цифры в каждом файле.