开发node js解析PDF考试评分方案时,如何编写regEx捕获层级编号内容块
PDF评分方案解析的正则适配实现
核心规则匹配逻辑
针对这类带层级括号编号的评分文本,正则需要同时满足两个核心要求:
- 精准识别合法的层级编号(兼容
(a)、(b)、(i)、(iii)、(a) (iii)这类组合式编号,同时避免把正文里的普通括号内容比如(solid)误判为编号) - 以编号为边界拆分文本块,每个块从当前编号开始,直到下一个同格式编号出现前的所有文本都归属当前块
可直接使用的正则表达式
/((?:\s*\([a-z]\)|\s*\([ivx]+\))+)\s*(.*?)(?=\s+(?:\([a-z]\)|\([ivx]+\))|\s*$)/gis
正则组成说明
- 第一捕获组(编号匹配部分):
(?:\s*\([a-z]\)|\s*\([ivx]+\))+:支持连续组合的编号序列,比如样例中连写的(a) (iii)\s*\([a-z]\):匹配单字母类层级编号,如(a)、(b)\s*\([ivx]+\):匹配小写罗马数字类层级编号,如(i)、(iii)、(iv)
- 第二捕获组(内容匹配部分):
.*?:非贪婪匹配规则,抓取从当前编号结束位置开始的所有文本,不会过度吞掉后续内容
- 边界断言部分:
(?=\s+(?:\([a-z]\)|\([ivx]+\))|\s*$):正向先行定义当前块的结束位置,要么是遇到下一个符合规则的合法编号,要么是整个文本的末尾,不会把下一个编号的内容纳入当前块
- 匹配标记说明:
g:全局匹配所有文本块i:兼容偶尔出现的大写字母/大写罗马数字编号s:允许.匹配换行符,适配多行排版的评分文本
误判规避说明
由于合法编号的括号内仅包含单字母或i/v/x组成的罗马数字,样例中正文出现的(solid)、(water/solution/liquid)这类带多字符普通文本的括号内容,完全不匹配编号的字符规则,不会被误判为拆分边界。
Node.js 端使用示例
// 导入解析得到的PDF文本 const scoreSchemeText = `(a) (iii) Separation of solid Filter to obtain solid/precipitate Requires realisation that solid is filtered off. Solid may be stated within in ‘removal of water’ Removal of water Dry (solid) OR Evaporate (water/solution/liquid) 2 ALLOW Removal of water Evaporate/ distil water/solution/liquid IGNORE ‘distil’ if product OR H2 is distilled Collection of remaining solid Requires realisation that solid remains IGNORE ‘Leave to crystallise’ (already solid) (a) (iv) Formula`; // 初始化拆分逻辑 const blockRegex = /((?:\s*\([a-z]\)|\s*\([ivx]+\))+)\s*(.*?)(?=\s+(?:\([a-z]\)|\([ivx]+\))|\s*$)/gis; const parsedResult = []; let match; while ((match = blockRegex.exec(scoreSchemeText)) !== null) { parsedResult.push({ nodeId: match[1].trim(), nodeContent: match[2].trim() }); } /** * parsedResult 输出结果: * 1. nodeId: "(a) (iii)",nodeContent: 从"Separation of solid"到"(already solid)"的全部评分说明 * 2. nodeId: "(a) (iv)",nodeContent: "Formula" */
后续适配调整提示
- 如果遇到大写罗马数字的编号格式,仅需将正则中罗马数字的字符类
[ivx]修改为[ivxIVX]即可兼容 - 如果需要支持其他格式的层级编号(比如带圈的数字、大写字母开头的编号),仅需在第一捕获组的匹配规则中新增对应字符的匹配分支,不需要改动边界断言的核心逻辑
- PDF解析输出的文本如果存在多余行首空格、制表符,正则中内置的
\s*已经做了兼容,无需额外预处理
内容的提问来源于stack exchange,提问作者Ace Rimmer
相关产品推荐
相关产品推荐

