如何用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
相关产品推荐
相关产品推荐

