【问题标题】:PowerShell: Remove domain extensions in email listPowerShell:删除电子邮件列表中的域扩展名
【发布时间】:2017-03-16 16:08:34
【问题描述】:

我有这个电子邮件地址列表。
我想删除所有域扩展。

Input.csv
john@email.com
albert@mail.co.uk
al@hotmail.nl
commadore@gmail.al

应该导致:

输出.csv
约翰@电子邮件
阿尔伯特@邮件
al@hotmail
commadore@gmail

如果我使用此代码...

$Sourcefile = 'C:\PS\Input.csv'
$Output =  'C:\PS\Output.csv'

(Get-Content $Sourcefile) | Foreach-Object {
$_ -replace '.com', ''`
   -replace '.co.uk', ''`
   -replace '.nl', ''`
   -replace '.al', ''

} | Set-Content $Output


.. 我得到:

Output.csv
约翰@电子邮件
bert@mail - (al 已删除)
al@hotmail
madore@gmail - (com 已删除)

有谁能帮忙吗?

【问题讨论】:

    标签: powershell csv email dns


    【解决方案1】:

    -replace 函数使用正则表达式。在 RegEx 中,点表示除换行符之外的任何字符。您只需使用 \ 转义您的点即可使其正常工作。

    像这样:

    (Get-Content $Sourcefile) | Foreach-Object {
    $_ -replace '\.com$', ''`
       -replace '\.co\.uk$', ''`
       -replace '\.nl$', ''`
       -replace '\.al$', ''
    
    } | Set-Content $Output
    

    根据@gvee 的评论,即使提供了some.alternate@emailaddress.com,添加行尾锚$ 也应该可以工作。

    【讨论】:

    • 这种方法在许多情况下不会失败,例如some.alternate@emailaddress.com => someternate@emailaddress
    • 会的。正则表达式电子邮件地址很难,这很困难。而且我很确定告诉 OP 他们正在处理 RegEx 会为他们指明正确的方向。
    • @gvee 好吧,我已经崩溃了。一个简单的$ 应该可以解决您的问题。
    【解决方案2】:

    正如 Fairy 指出的那样,您需要注意您的正则表达式元字符,例如 .

    我想删除所有域扩展。

    如果是这种情况,那么您不需要输入要删除的每一个。您应该能够删除最后一个句点之后(包括最后一个句点)的所有字符。

    由于-replace 是一个数组运算符,您不需要 使用ForEach-Object

    (Get-Content $Sourcefile) -replace "(@.+?)\..*$",'$1' | Set-Content $Output
    

    这将匹配“@”之后的所有内容,包括“@”。它仅用“@”和第一个句点之前的内容替换它。

    如果你真的想替换某些域,你最好保留一个字符串数组并用它构建一个正则表达式替换字符串。使更改更容易,代码将保持干净。

    $suffixesToRemove = "com","co.uk","nl","al"
    $regex = "\.($(($suffixesToRemove|ForEach-Object{[regex]::Escape($_)}) -join "|"))$"
    (Get-Content $Sourcefile) -replace $regex | Set-Content $Output
    

    计算的正则表达式字符串如下所示

    \.(com|co\.uk|nl|al)$ 
    

    因此它使用了一个交替组,其中元字符已转义。

    【讨论】:

    • 谢谢! :) 超级开心 :)
    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多