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

如何用Python正则去除邮箱解析嵌套捕获组中的空格?

解决Python正则解析带空格邮箱的捕获组去空格问题

正则本身无法直接修改捕获组内的内容(比如去除空格),但可以通过以下两种方式实现你的需求:

方法一:调整正则,直接捕获无空格的有效内容

修改正则表达式,用非捕获的\s*匹配空格(不包含在捕获组内),让捕获组仅抓取无空格的核心内容:

^\s*([\w\-\/.!#$%&'*+=?^_`{|}~]+)\s*@\s*([\w]+)\s*\.\s*([\w]{2,})\s*$

各捕获组说明:

  • 组1:本地部分(johndoe)
  • 组2:域名主体(gmail)
  • 组3:域名后缀(com)

在Python中拼接完整域名:

import re

email = "        johndoe        @      gmail      .  com"
pattern = r'^\s*([\w\-\/.!#$%&\'*+=?^_`{|}~]+)\s*@\s*([\w]+)\s*\.\s*([\w]{2,})\s*$'
match = re.match(pattern, email)

if match:
    local_part = match.group(1)
    domain_body = match.group(2)
    full_domain = f"{domain_body}.{match.group(3)}"
    
    print(f"本地部分:{local_part}")
    print(f"完整域名:{full_domain}")
    print(f"域名主体:{domain_body}")

方法二:捕获含空格内容后,用Python处理去空格

如果不想修改原有正则,可以在匹配后对捕获组做字符串处理:

  • 用strip()去除首尾空格
  • 用re.sub()替换完整域名中的所有中间空格
import re

email = "        johndoe        @      gmail      .  com"
pattern = r'^([\w\s\-\/.!#$%&\'*+=?^_`{|}~]+)@(([\s\w+]+)\.[\w\s]{2,})$'
match = re.match(pattern, email)

if match:
    local_part = match.group(1).strip()
    full_domain = re.sub(r'\s+', '', match.group(2))
    domain_body = match.group(3).strip()
    
    print(f"本地部分:{local_part}")
    print(f"完整域名:{full_domain}")
    print(f"域名主体:{domain_body}")

推荐方案

优先选方法一,正则直接定位有效内容,逻辑更清晰,不需要额外的字符串处理步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:05:29