Заменить неверный формат электронной почты на действительный - PullRequest
0 голосов
/ 25 января 2020

В Power Query у меня есть список электронных писем, который содержит недействительные электронные письма. Я ищу использовать М-коды, чтобы идентифицировать и «исправить» их. Например, мой список адресов электронной почты будет содержать что-то вроде «1234. my_email_gmail_com@error.invalid.com»

. Я ищу Power Query, чтобы найти похожие адреса электронной почты, а затем выдать вывод действительного сообщения электронной почты. Для приведенного выше примера это должно быть "my_email@gmail.com"

По сути, я хочу сделать следующее:

  • Удалить цифры на передней панели (количество цифр меняется)
  • Удалить "@ error.invalid.com"
  • Заменить первое подчеркивание "_" справа на "."
  • Заменить второе подчеркивание "_" из право на "@"

Я все еще новичок в Power Query, особенно с кодами М. Я ценю любую помощь и руководство, которые я могу получить.

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Это тоже похоже на работу:

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 голосов
/ 26 января 2020

Попробуйте функцию 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" ) предлагает его удалить. Адреса электронной почты, которые не имеют . сразу после первых цифр, будут возвращать ошибку (и необходимо улучшить логическое выражение c для removeLeadingNumbers).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...