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

使用正则表达式提取OCR生成PDF中含空格的邮箱

处理OCR带随机空格的邮箱提取方案

Got it,OCR扫出来的邮箱带随机空格确实挺头疼的——毕竟空格可能插在用户名里、@前后、域名中间甚至后缀里。咱们直接上实用方案,分两步搞定:

第一步:提取带空格的疑似邮箱片段

先写个正则,把所有**包含@且前后有合法字符(允许夹杂空格)**的片段捞出来,不管空格在哪:

[\w.]+(?:\s+[\w.]+)*@\s*(?:[\w.]+\s*)+

拆解下逻辑:

  • [\w.]+(?:\s+[\w.]+)*:匹配用户名部分,支持字母/数字/下划线/点,以及这些字符之间的任意空格(比如example .email或example.email都能命中)
  • @\s*:匹配@符号,后面允许0个或多个空格
  • (?:[\w.]+\s*)+:匹配域名部分,同样支持合法字符和中间的空格(比如g mail .com或gmail.com都能匹配)

第二步:清理空格+验证合法性

提取到片段后,先把所有空格删掉,再用标准邮箱正则过滤掉不完整的垃圾片段(比如你举的example.email @gm ail,清理后是example.email@gmail,会被排除)。

标准邮箱验证正则用这个就够(覆盖绝大多数合法场景):

^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$

可直接运行的Python示例

给你写了个完整脚本,把OCR文本扔进去就能出结果:

import re

# 模拟你的OCR扫描文本
ocr_text = """
Contact us at example.email@gmail.com or example.email@g mail.com
Also reach out via example.email@ gmail.com or example.email @ gmail.com
Don't forget example.email @ gmail .com and example.email @gmail .com
And the incomplete one: example.email @gm ail
"""

# 1. 提取带空格的疑似邮箱
raw_email_pattern = re.compile(r'[\w.]+(?:\s+[\w.]+)*@\s*(?:[\w.]+\s*)+')
raw_emails = raw_email_pattern.findall(ocr_text)

# 2. 清理空格+验证有效邮箱
valid_email_pattern = re.compile(r'^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$')
valid_emails = []
for raw in raw_emails:
    cleaned = raw.replace(' ', '')
    if valid_email_pattern.match(cleaned):
        valid_emails.append(cleaned)

print("提取到的有效邮箱:")
for email in valid_emails:
    print(f"- {email}")

运行后输出:

提取到的有效邮箱:
- example.email@gmail.com
- example.email@gmail.com
- example.email@gmail.com
- example.email@gmail.com
- example.email@gmail.com
- example.email@gmail.com

那个不完整的片段会被自动过滤,完美。

额外小技巧

如果你的OCR还把.识别成了中文逗号,或者分号;,可以在清理空格后加一步替换:

cleaned = raw.replace(' ', '').replace(',', '.').replace(';', '.')

根据你实际的OCR错误类型调整就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:14:29