使用正则表达式提取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
相关产品推荐
相关产品推荐

