Word 2003/2007 - 多行正则表达式

时间:2011-08-02 19:00:51

标签: regex ms-word multiline

我有一个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

我尝试使用正则表达式来匹配文本并从文档中提取它,但是我使用Word的专有RegEx语法时遇到了困难,我无法找到如何制作跨越多行和多个文档块的RegEx。 我也试过PowerGREP; RegEx工作,但它只能读取文档中的纯文本,它会丢失所有列表(例如问题和答案的数量)和所有对象(一些问题和答案都有我必须保留的图表和表格)。

总而言之,我必须遵循这个逻辑。

  1. 从问题中选择所有内容(文本和对象) 直到单词“ANSWER”(不包括在内)。为每个问题执行此操作 (即一次处理一个问题/块)。
  2. 从单词“ANSWER”中选择所有内容(文本和对象),直到下一个问题(不包括在内)。
  3. 该文档采用.DOC格式,但我也可以将其保存在.DOCX中。注意:我尝试解析.DOCX的XML,但它包含数千个多余的标记,使一切变得不可能复杂。

1 个答案:

答案 0 :(得分:0)

恕我直言,你不应该使用REGEXP(即使它更好,我害怕 - 你的第一次尝试证明它 - 这将是非常困难的。)

您可以尝试使用带有find表达式的vba字ANSWER:函数遍历文档。
然后你可以遍历每个块:

  • 从开始到开始的选择 问题文档中的ANSWER:
  • 剪切粘贴下一部分(将选择范围扩展到下一部分3或4) 答案文件

请参阅here>>章节使用手动换行符查找,替换硬退货以获取一些提示。这个link了解更多信息。