If statement 用有效的电子邮件格式替换无效的电子邮件格式

If statement 用有效的电子邮件格式替换无效的电子邮件格式,if-statement,replace,powerquery,If Statement,Replace,Powerquery,在Power Query中,我有一个包含无效电子邮件的电子邮件列表。我希望使用M代码来识别和“修复”它们。例如,我的电子邮件列表将包括类似“1234.my_email\u gmail”的内容_com@error.invalid.com" 我正在寻找电力查询找到类似的电子邮件地址,然后产生一个有效的电子邮件输出。对于上面的例子,它应该是“我的”_email@gmail.com" 基本上,我想做以下工作: 删除前面的数字(数字数量不同) 删除“@error.invalid.com” 将右侧的第一个

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

我正在寻找电力查询找到类似的电子邮件地址,然后产生一个有效的电子邮件输出。对于上面的例子,它应该是“我的”_email@gmail.com"

基本上,我想做以下工作:

  • 删除前面的数字(数字数量不同)
  • 删除“@error.invalid.com”
  • 将右侧的第一个下划线“\u1”替换为“”
  • 将右侧的第二个下划线“389;”替换为“@”

我对Power Query还是个新手,尤其是m代码。非常感谢您对我的帮助和指导。

请尝试下面的功能
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
关于:

  • “删除前面的数字(数字数量不同)”

您的问题没有提到如何处理前导的
(如果删除前导数字,它将保留),而是您的预期输出(
“我的_email@gmail.com“
)建议将其删除。没有紧跟在前导数字后面的
的电子邮件地址将返回错误(需要改进
RemoveReadingNumber
表达式的逻辑)。

这似乎也可行:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Custom" = Table.AddColumn(Source, "Valid", each Text.ReplaceRange(Text.ReplaceRange(Text.BetweenDelimiters([Column1],".","@"),Text.PositionOf(Text.BetweenDelimiters([Column1],".","@"),"_",Occurrence.Last),1,"."),Text.PositionOf(Text.ReplaceRange(Text.BetweenDelimiters([Column1],".","@"),Text.PositionOf(Text.BetweenDelimiters([Column1],".","@"),"_",Occurrence.Last),1,"."),"_",Occurrence.Last),1,"@"))
in
    #"Added Custom"

找一种叫模糊匹配的东西谢谢。是的,数字后的前导“.”也应该删除。作为电力查询中的一个noob,我复制了上面的代码,并替换了“1234.my\u email\u gmail”_com@error.invalid.com“在电子邮件栏中。对于大多数有效的电子邮件地址,它们返回“com”或类似的内容。我想我可以用它来帮助我确定哪些是我需要修复的,但后来我意识到了诸如“valid”之类的有效电子邮件。email@ymail.com“将作为“电子邮件”返回。关于如何避免这种情况,有什么建议吗?没关系,我可以使用条件列只显示有效的电子邮件地址,按照上面的公式。如果你有代码可以帮忙,我很乐意接受。然而,我只是能够操纵数据以获得所需的最终输出。再次感谢!