if-statement - 用有效的电子邮件格式替换无效的电子邮件格式
问题描述
在 Power Query 中,我有一个包含无效电子邮件的电子邮件列表。我希望使用 M 代码来识别和“修复”它们。例如,我的电子邮件列表将包含类似“1234.my_email_gmail_com@error.invalid.com”的内容
我正在寻找 Power Query 来查找类似的电子邮件地址,然后生成有效电子邮件的输出。对于上面的示例,它应该是“my_email@gmail.com”
本质上,我想做以下事情:
- 去掉前面的数字(位数不同)
- 删除“@error.invalid.com”
- 将右边第一个下划线“_”替换为“.”
- 将右边第二个下划线“_”替换为“@”
我还是 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
关于:
- “去掉前面的数字(位数不同)”
您的问题没有提到如何处理前导.
(如果您删除前导数字,它仍然存在),但您的预期输出 ( "my_email@gmail.com"
) 表明它应该被删除。前导数字后没有.
立即的电子邮件地址将返回错误(并且removeLeadingNumbers
需要改进表达逻辑)。
推荐阅读
- python - 如何构建系统以通过链接查看用户的个人资料内容
- flutter - 你能在 Flutter 中开发家长控制应用吗?
- google-sheets - 谷歌表格 | 哪个公式适合我?计数/数组?
- java - 如何在不使用嵌套 for 循环的情况下修改 Java 上的数组?
- php - WooCommerce get_the_terms 类别和子类别顺序
- asp.net-core - ASP.NET Core 文件请求创建空 blob
- python-3.x - sklearn.model:ValueError:发现样本数量不一致的输入变量:[25、228]
- java - 将存储 LatLng 值的 JSON 字符串转换为 Java 数组
- python - 包含 int 和 str 的列表上的 isinstance
- javascript - Chrome 扩展的 contentScript 不会得到 querySelectorAll