首页 > 解决方案 > 用有效的电子邮件格式替换无效的电子邮件格式

问题描述

在 Power Query 中,我有一个包含无效电子邮件的电子邮件列表。我希望使用 M 代码来识别和“修复”它们。例如,我的电子邮件列表将包含类似“1234.my_email_gmail_com@error.invalid.com”的内容

我正在寻找 Power Query 来查找类似的电子邮件地址,然后生成有效电子邮件的输出。对于上面的示例,它应该是“my_email@gmail.com”

本质上,我想做以下事情:

我还是 Power Query 的新手,尤其是 M 代码。我很感激我能得到的任何帮助和指导。

标签: if-statementreplacepowerquery

解决方案


试试cleanEmailAddress下面的功能:

let
    cleanEmailAddress = (invalidEmailAddress as text) as text =>
        let
            removeLeadingNumbers = Text.AfterDelimiter(invalidEmailAddress, "."), // Assumes invalid numbers are followed by "." which itself also needs removing.
            removeInvalidDomain = Text.BeforeDelimiter(removeLeadingNumbers, "@"),
            replaceLastOccurrence = (someText as text, oldText as text, newText as text) as text =>
                let
                    lastPosition = Text.PositionOf(someText, oldText, Occurrence.Last),
                    replaced = if lastPosition >= 0 then Text.ReplaceRange(someText, lastPosition, Text.Length(oldText), newText) else someText
                in replaced,
            overwriteTopLevelDomainSeparator = replaceLastOccurrence(removeInvalidDomain, "_", "."),
            overwriteAtSymbol = replaceLastOccurrence(overwriteTopLevelDomainSeparator, "_", "@")
        in overwriteAtSymbol,
    cleaned = cleanEmailAddress("1234.my_email_gmail_com@error.invalid.com")
in
    cleaned

关于:

  • “去掉前面的数字(位数不同)”

您的问题没有提到如何处理前导.(如果您删除前导数字,它仍然存在),但您的预期输出 ( "my_email@gmail.com") 表明它应该被删除。前导数字后没有.立即的电子邮件地址将返回错误(并且removeLeadingNumbers需要改进表达逻辑)。


推荐阅读