VBA заменить определенные перевозки
Все.
Я привык к программированию VBA в Excel, но я новичок в структурах в Word. Я работаю через библиотеку текстовых файлов, чтобы обновить их. Многие из них являются либо документами OCR, либо были введены вручную.
У каждого есть повторяющийся шаблон, наиболее распространенным из которых является ненужный возврат каретки.
Например, я смотрю на несколько текстовых файлов, где после каждой строки есть двойной возврат. Поиск и замена всех двойных возвратов каретки удаляет все различия абзаца. Однако каждая строка имеет длину около 30 символов, и если я вручную выполню следующую логику, это даст мне функциональный документ.
Если после 30+ символов есть двойной возврат каретки, я заменяю их пробелом. Если до двойного возврата было менее 30 символов, я заменяю их одним возвратом.
Может ли кто-нибудь помочь мне с некоторым элементарным кодом, который поможет мне начать работу с этим? Затем я мог бы изменить его для каждого "образца" текстовых документов, которые у меня есть.
например
In this case, there are more than
thirty characters per line. And I
will keep going to illustrate this
example.
This would be a new paragraph, and
would be separated by another of
the single returns.
Я хочу код, который будет возвращать:
In this case, there are more than thirty character returns. And I will keep going to illustrate this example.
This would be a new paragraph, and would be separated by another of the single returns.
Дайте мне знать, если кто-нибудь может выбросить что-нибудь, с чем я могу играть!
2 ответа
Вы можете сделать это без кода (который требует RegEx), просто используя собственные инструменты поиска / замены Word, где:
Find = ([!^13]{30,})[^13]{1,}
Replace = \1^32
и, чтобы убрать остаточные разрывы из нескольких абзацев:
Find = [^13]{2,}
Replace = ^p
Вы могли бы, конечно, записать выше, как макрос...
Вот RegEx, который может работать для вас:
(\n\n)(?<!\.(\n\n))
Подстановка - это просто простое место, вы можете попробовать его (и изменить / настроить) здесь: https://regex101.com/r/zG9GPw/4
Этот "шаблон" говорит движку RegEx искать символ новой строки \n
который происходит х2, как это \n\n
(стоит отметить, что это из вашего вопроса и может отличаться в ваших файлах, например, может быть \r\n), и предполагается, что допустимый разрыв строки будет завершен с полной остановкой: \.
,
В RegEx символ полной остановки представляет собой односимвольный подстановочный знак, поэтому его необходимо экранировать с помощью '\' (n и r - нормальные символы, экранирование означает, что механизм RegEx представляет символы новой строки и возвращаемые символы).
Итак... выражение ищет группу символов новой строки x2, но затем использует отрицательный взгляд назад, чтобы исключить любые совпадения, где предыдущий символ был полной остановкой.
Во всяком случае, все это объясняется на сайте:
Вот как можно найти и заменить RegEx с помощью NotePad++ (я не уверен, что он поставляется с RegEx или нужен плагин, в любом случае это легко). Но вы можете установить местоположение, фильтры (для определенных типов файлов) и другие параметры (например, поиск в подкаталогах).
Кроме того, как отметил @MacroPod, вы также можете сделать это с помощью MS Word, документ за документом, без использования какого-либо кода:)