Python正则捕获庭审笔录文本:避免qa_type捕获小写q/a的技术问询
正则分组匹配问题解决
需求与问题
核心需求
从庭审笔录PDF提取问答/发言者对应文本,需输出字段:qa_type、page_start、page_end、line_num_start、line_num_end、qa_text,用Python结合正则实现分组提取。
当前问题
现有正则会错误捕获小写的q/a(如第275页第2行、第17行的小写a),同时需要满足:
Q/A仅匹配大写形式- 发言者头衔(Mr、Mrs.、Dr.等)支持大小写不敏感匹配,且与
Q/A归入同一qa_type分组
当前正则
regex = r"(^(?P<line_num>[1-9]|1[0-9]|2[0-2])\b +)(?P<qa_type>(Q|A|Mr[\.|:]? [a-z]+|Mrs[\.|:]? [a-z]+|Ms[\.|:]? [a-z]+|Miss[\.|:]? [a-z]+|Dr[\.|:]? [a-z]+))?([\.|:|\s]+)?(?P<type_text>\b.*)|page (?P<page_num>\d{1,3})"
解决方案
调整后的正则
regex = r"(^(?P<line_num>[1-9]|1[0-9]|2[0-2])\b +)(?P<qa_type>(Q|A|(?i:Mr[\.:]? [a-z]+|Mrs[\.:]? [a-z]+|Ms[\.:]? [a-z]+|Miss[\.:]? [a-z]+|Dr[\.:]? [a-z]+)))?([\.:\s]+)?(?P<type_text>\b.*)|page (?P<page_num>\d{1,3})"
关键调整点
- 局部大小写不敏感修饰:用
(?i:...)包裹所有头衔规则,仅让头衔部分支持大小写匹配(如Mr可匹配mr/MR),不影响Q/A的大写严格匹配。 - 简化字符集:将
[\.|:]简化为[\.:],字符集内.无需转义,精简表达式。
额外提示
- 匹配时可过滤
qa_type为空的结果,避免无效数据。 - 若仍有小写
q/a误匹配,可在qa_type分组前增加边界校验(如\b),强化匹配准确性。
内容的提问来源于stack exchange,提问作者rnwtenor
相关产品推荐
相关产品推荐

