在Power Query中,我有一个包含无效电子邮件的电子邮件列表。我期待使用M码来识别和“修复”他们。例如,我的电子邮件列表将包括类似于"1234.my_email_gmail_com@error.invalid.com“的内容。
我正在寻找权力查询找到类似的电子邮件地址,然后产生一个有效的电子邮件输出。对于上面的例子,应该是"my_email@gmail.com“
基本上,我想做以下几点:
"@error.invalid.com"
的第二个下划线"_”。
我还是刚开始使用Power Query,特别是使用M代码。我很感激我能得到的任何帮助和指导。
发布于 2020-01-26 15:00:35
尝试下面的函数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表达式的逻辑需要改进)。
发布于 2020-01-27 18:33:55
这似乎也有效:
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"https://stackoverflow.com/questions/59913271
复制相似问题