Word 2003/2007 - Многострочное регулярное выражение - PullRequest
1 голос
/ 02 августа 2011

У меня есть документ Word, содержащий вопросы и ответы в следующем формате:

1. What is the name of our planet?
a) Earth
b) Mars
c) Venus
d) Jupiter

ANSWER:
a
TYPE: MC  DIFFICULTY: Easy
KEYWORDS: planet solar system

Что мне нужно сделать, так это «разделить» документ на две части, первая из которых содержит только вопросы, а вторая содержит только ответы. Результат должен быть следующим.

Документ 1 - Вопросы

1. What is the name of our planet?
a) Earth
b) Mars
c) Venus
d) Jupiter

Документ 2 - Ответы

1. ANSWER:
a
TYPE: MC  DIFFICULTY: Easy
KEYWORDS: planet solar system

Документы имеют довольно регулярную структуру, т.е. - номер списка - Текст вопроса - строка, содержащая «ANSWERL:» - Текст ответа - Два CRLF

Я пытался использовать регулярные выражения для сопоставления текста и извлечения его из документа, но у меня возникли трудности с использованием собственного синтаксиса RegEx в Word, и я не смог выяснить, как создать RegEx, охватывающий несколько строк и несколько блоков документа. Я также попробовал PowerGREP; RegEx работает, но он может только читать простой текст из документа и теряет все списки (например, номера вопросов и ответов) и все объекты (некоторые вопросы и ответы имеют графики и таблицы, которые я должен хранить).

Подводя итог, я должен следовать этой логике.

  1. Выберите все (текст и объекты) из вопроса
    число до слова «ОТВЕТ» (исключено). Сделайте это для каждого вопроса (т.е. обрабатывать один вопрос / блок за раз).
  2. Выберите все (текст и объекты) от слова "ОТВЕТ" до следующего вопроса (исключено).

Документ в формате .DOC, но я также могу сохранить его в .DOCX. Примечание. Я попытался проанализировать XML-файл .DOCX, но он содержит тысячи лишних тегов, что делает все невероятно сложным.

1 Ответ

0 голосов
/ 03 августа 2011

ИМХО, вы не должны использовать REGEXP (даже если это будет лучше, я боюсь - и ваши первые попытки докажут это - что это будет довольно сложно).

То, что вы можете попробовать, этоцикл по документу с помощью функции vba word find с выражением ANSWER:.
Затем вы можете циклически проходить по каждому блоку:

  • Вырезать и вставлять выделение с начала до началаANSWER: в документе Вопрос .
  • Вырезать и вставить следующую часть (расширить выделение до следующих 3 или 4 строк) в документе Ответ .

См. здесь >> глава Найти, заменить жесткие возвраты на ручные разрывы строк для некоторых советов.И эта ссылка для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...