You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#正则表达式提取OCR文本指定字段值并排除干扰

从OCR字符串中提取Account Type字段值的C#正则解决方案

需求概述

从OCR生成的结构不稳定字符串中,精准提取Account Type的字段值,需避免误提取Account Number的字段名或对应值,要求仅通过正则表达式实现,使用C#语法。

预期提取结果

  • 示例1:MyCheque Thing with Bells
  • 示例2:MyCheque Thing with Bells
  • 示例3:My Cheque Account
  • 示例4:My Cheque Accounting Account Number 3

现有正则的问题

原尝试的正则表达式:

(?minx)
(?<=^(.*account\s*type[\s\*:_-]+))
(\b[a-z0-9-_]+\b) (\s+\b[a-z-_]+\b) {0,9}
(?!\s+Account\s+Number)

存在以下缺陷:

  • 仅支持匹配由单个单词拼接的片段,无法处理带空格的多词组合(如示例3的My Cheque Account)
  • 负向预查的作用范围有限,无法有效排除包含Account Number的内容
  • 未处理大小写混合的情况,适配OCR输出的鲁棒性不足

修正后的正则表达式

针对上述问题优化后的C#正则:

(?si)(?<=account\s*type[\s*:_-]+)(?!.*account\s*number).+?(?=$|\s*(account\s*number|[\r\n]))

正则规则解释

  • (?si):启用单行模式(.可匹配换行符)和忽略大小写模式,适配OCR输出的大小写混乱及跨行字段内容
  • (?<=account\s*type[\s*:_-]+):正向预查,定位到Account Type字段标识之后,支持account type的大小写变体,以及多种分隔符(空格、*、:、_、-)的混合使用
  • (?!.*account\s*number):负向预查,确保匹配的内容中不包含Account Number字段标识,彻底避免误提取该字段相关内容
  • .+?(?=$|\s*(account\s*number|[\r\n])):非贪婪匹配任意字符,直到遇到字符串结尾、Account Number标识或换行符为止,精准截断到Account Type字段的结束位置

示例验证

针对预期场景的验证结果:

  1. 输入:Account Type: MyCheque Thing with Bells Account Number: 12345 → 提取结果:MyCheque Thing with Bells
  2. 输入:*Account_Type* MyCheque Thing with Bells - Account Number 67890 → 提取结果:MyCheque Thing with Bells
  3. 输入:account type My Cheque Account → 提取结果:My Cheque Account
  4. 输入:Account Type: My Cheque Accounting Account Number 3 → 提取结果:My Cheque Accounting Account Number 3(注:需求允许提取包含Account Number值的内容,正则仅排除Account Number字段名的误匹配)

内容的提问来源于stack exchange,提问作者pcbulldozer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:50:14