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

基于字符串值从OCR识别的收据文本中提取总支付金额的实现方法

收据总金额提取解决方案

你之前用split(' ')拆分失败的核心原因是OCR输出的文本行内空白数量不固定,还可能混入制表符等非空格空白字符,按单个空格拆分无法稳定定位金额位置,下面提供两种鲁棒性更高的实现方案:

方案1:正则匹配(推荐)

直接匹配固定前缀Total后的金额格式,不需要额外处理行内空白逻辑:

import re

# 你的OCR识别结果
ocr_content = """THE FOOD CLUB
78990 SOUTH STREET AVE
ALBANY, NYC, 343434

08/11/2020 05:43 PM
CHECK: 307859 CUST: 59
1 CHICKEN MEALS $9.99
EXTRA SPYCIES $0.00
2 PIDIA $25.98
Subtotal $39.57
Tax $3.86
Total $43.43
"""

# 匹配Total后跟随的美元金额
result = re.search(r"Total\s+\$(\d+\.\d{2})", ocr_content)
if result:
    # 提取纯数字金额
    total_num = result.group(1)
    # 如需带$符号可自行拼接为 f"${total_num}"
    print(total_num) # 输出:43.43

方案2:逐行遍历定位

适合不想引入正则依赖的场景,通过行前缀和$符号定位金额:

ocr_content = """THE FOOD CLUB
78990 SOUTH STREET AVE
ALBANY, NYC, 343434

08/11/2020 05:43 PM
CHECK: 307859 CUST: 59
1 CHICKEN MEALS $9.99
EXTRA SPYCIES $0.00
2 PIDIA $25.98
Subtotal $39.57
Tax $3.86
Total $43.43
"""

for line in ocr_content.splitlines():
    stripped_line = line.strip()
    # 定位Total开头的行
    if stripped_line.startswith("Total"):
        # 找到$符号的位置,直接截取后续内容即为金额
        dollar_idx = stripped_line.index("$")
        total_num = stripped_line[dollar_idx+1:]
        print(total_num) # 输出:43.43
        break

两种方案都不受行内空格数量的影响,即使后续OCR识别出的Total和金额之间的空格数有变化,也能正常提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:54:03