如何用Python脚本提取Quick Sight报告中邮箱的纯域名
提取QuickSight中邮件域名并去除-delete后缀的Python实现
问题场景
在QuickSight报告的某列中,数据存储格式如下:
{ `jeanette.underwood@crowe.com-delete` `isaac@accumulus.cpa-delete` `veronica@accumulus.co-delete` `BDengler@alloysilverstein.com-delete-delete-delete-delete-delete` `mhahn@andersonadvisors.com-delete-delete` }
我们需要提取出纯域名,期望输出为:
{ `crowe.com` `accumulus.cpa` `accumulus.co` `alloysilverstein.com` `andersonadvisors.com` }
当前使用的QuickSight内置脚本:
trim(substring({Reg Email Id},locate({Reg Email Id},'@',1)+1,strlen({Reg Email Id})-locate({Reg Email Id},'@',1)))
只能提取@之后的内容,但无法去除末尾重复出现的-delete后缀,因此需要用Python实现精准提取。
Python实现方案
方法1:字符串分割法
通过两次分割直接定位域名部分,逻辑简单直观:
def get_pure_domain(email_item): # 先切分@符号,取后半段 after_at = email_item.split('@')[-1] # 按-delete切分,取第一段就是纯域名 pure_domain = after_at.split('-delete')[0] # 清理掉前后的反引号和空格 return pure_domain.strip('` ') # 测试用的原始数据 raw_items = [ "`jeanette.underwood@crowe.com-delete`", "`isaac@accumulus.cpa-delete`", "`veronica@accumulus.co-delete`", "`BDengler@alloysilverstein.com-delete-delete-delete-delete-delete`", "`mhahn@andersonadvisors.com-delete-delete`" ] # 处理并按期望格式输出 print("{") for item in raw_items: print(f" `{get_pure_domain(item)}`") print("}")
方法2:正则表达式法
用正则精准匹配@之后、第一个-delete之前的内容,适配更多边缘情况:
import re def get_pure_domain(email_item): # 匹配@后到第一个-delete前的内容 domain_match = re.search(r'@([^-]+)(?=-delete)', email_item) if domain_match: return domain_match.group(1).strip() # 兼容没有-delete后缀的情况 fallback_match = re.search(r'@([^\s`]+)', email_item) return fallback_match.group(1).strip() if fallback_match else "" # 测试用的原始数据 raw_items = [ "`jeanette.underwood@crowe.com-delete`", "`isaac@accumulus.cpa-delete`", "`veronica@accumulus.co-delete`", "`BDengler@alloysilverstein.com-delete-delete-delete-delete-delete`", "`mhahn@andersonadvisors.com-delete-delete`" ] # 处理并按期望格式输出 print("{") for item in raw_items: print(f" `{get_pure_domain(item)}`") print("}")
两种方法都能完美处理重复-delete的场景,输出符合要求的纯域名。如果是在QuickSight中集成,可以将上述逻辑封装为自定义函数用于数据预处理。
内容的提问来源于stack exchange,提问作者Thar
相关产品推荐
相关产品推荐

