寻求可匹配含换行及多行结构的PDF教材选择题的正则表达式
匹配PDF中多行选择题的正则表达式方案
问题场景
需要匹配PDF导出的选择题,题干可能跨多行,现有正则无法适配这种情况。示例题目结构如下:
1. What does cabotage refer to? a. Domestic air services within a state b. An international air carrier c. A flight above territorial waters d. Crop spraying 2. The Convention signed by the states relating to damage caused by foreign aircraft to persons and property on the ground is: a. the Tokyo convention b. the Rome convention c. the Warsaw convention d. the Paris convention.
原有正则的问题
你之前使用的\(\d+\.[^\n+]+\n(?:[ \t]*[a-zA-Z]\.[^\n]+\n)+[\s]*)\存在两个核心问题:
- 用
[^\n]+限制了题干只能是单行,无法匹配跨多行的内容 - 多余的括号和转义符导致匹配逻辑混乱
解决方案正则
针对多行题干的场景,调整后的正则如下(需开启多行模式(m)和全局模式(g)):
^\d+\.[\s\S]+?(?=\n[ \t]*[a-zA-Z]\.)(?:\n[ \t]*[a-zA-Z]\.[^\n]+)+
正则各部分解释
^\d+\.:匹配行首的题号格式(数字+英文点),多行模式下^会匹配每一行的开头[\s\S]+?(?=\n[ \t]*[a-zA-Z]\.):非贪婪匹配任意字符(包括换行符),直到遇到下一行以「空格/制表符+字母+英文点」开头的选项行(正向预查,不消耗匹配内容)(?:\n[ \t]*[a-zA-Z]\.[^\n]+)+:匹配一个或多个选项行,允许选项前有空格或制表符,每个选项行匹配到换行结束
效果说明
用该正则匹配示例题目时,会精准捕获两个完整题目:
- 包含单行题干的第1题
- 包含跨两行题干的第2题,以及对应的所有选项
内容的提问来源于stack exchange,提问作者George Gohl
相关产品推荐
相关产品推荐

