如何用M代码移除邮箱列中匹配唯一ID列的前缀内容?
用M代码清理邮箱列中匹配的唯一ID前缀
实现思路
核心逻辑很直接:逐行检查邮箱地址是否以对应的唯一ID作为前缀,匹配上就删掉该前缀,没匹配上就保留原邮箱。因为唯一ID长度不固定,必须用动态判断+截取的方式,不能硬编码字符数。
M代码实现
假设你的数据源表名为Source,直接用以下代码添加清理后的邮箱列:
let Source = 你的数据源引用, // 替换成实际的数据源(比如Excel.Workbook、SQL.Database等) AddCleanedEmail = Table.AddColumn(Source, "Cleaned Email", each // 先判断唯一ID非空,且邮箱以该ID开头 if [unique ID] <> "" and Text.StartsWith([email], [unique ID]) then // 从邮箱的第N位开始截取(N是唯一ID的长度),直接去掉前缀 Text.Range([email], Text.Length([unique ID])) else // 不满足条件就保留原邮箱 [email] ) in AddCleanedEmail
代码细节说明
Text.StartsWith([email], [unique ID]):精准判断当前行的邮箱是否以对应的唯一ID开头,避免误删无关字符[unique ID] <> "":防止唯一ID为空时,错误截取邮箱内容Text.Range([email], Text.Length([unique ID])):动态获取唯一ID的长度,从该位置开始截取邮箱剩余部分,替代固定长度的删除操作
测试验证
用你给出的示例数据测试,结果如下:
| unique ID | Cleaned Email | |
|---|---|---|
| george@hotmail.com | 79fsdfv8v2657f842356j0 | george@hotmail.com |
| 784ret3956w35497er834r62mary@hotmail.com | 784ret3956w35497er834r62 | mary@hotmail.com |
| 34gfng6w5h6pauly@outlook.com | 34gfng6w5h6 | pauly@outlook.com |
完全符合预期结果。
内容的提问来源于stack exchange,提问作者Sweepster
相关产品推荐
相关产品推荐

