首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用有效的电子邮件格式替换无效的电子邮件格式

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

Stack Overflow用户
提问于 2020-01-25 20:47:54
回答 2查看 69关注 0票数 0

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

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

基本上,我想做以下几点:

"@error.invalid.com"

  • Replace
  • 移除前面的数字(位数不同),
  • 从右移除第一个下划线"_“。”
  • “替换右到"@"

的第二个下划线"_”。

我还是刚开始使用Power Query,特别是使用M代码。我很感激我能得到的任何帮助和指导。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-26 15:00:35

尝试下面的函数cleanEmailAddress

代码语言:javascript
运行
复制
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表达式的逻辑需要改进)。

票数 0
EN

Stack Overflow用户

发布于 2020-01-27 18:33:55

这似乎也有效:

代码语言:javascript
运行
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59913271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档