我有一个如下的纯文本文件:
"sample1@gmail.com"
"sample2.test@gmail.com"
"sample3.test.test2@gmail.com"
以此类推...
现在使用Powershell,我试图逐行读取此纯文本文件,并读取不带双引号的电子邮件并将其添加到数组列表中:
$arrayListEmails = New-Object System.Collections.ArrayList
$regex = '"([^/)]+)"'
[System.IO.File]::ReadLines("C:\temp\emailsList.txt") | Where-Object {$_ -match $regex} | ForEach-Object {
write-host "email: $_"
$arrayListEmails.Add($_) > $null
}
我不知道为什么,但是在执行上面的代码块后,我收到带双引号的电子邮件,这是输出:
email: "sample1@gmail.com"
email: "sample2.test@gmail.com"
email: "sample3.test.test2@gmail.com"
以此类推...
但是我想要以下内容(不带双引号的电子邮件):
email: sample1@gmail.com
email: sample2.test@gmail.com
email: sample3.test.test2@gmail.com
似乎正则表达式被双引号了。。。
答案 0 :(得分:2)
否则,您可以做到这一点(import-csv删除列上的双引号):
$Yourlist=import-csv "C:\temp\emailsList.txt" -Header Email
$Yourlist | %{ "email : {0}" -f $_.Email }
答案 1 :(得分:0)
因为您的电子邮件带有引号:)尝试
write-host ("email: " + $_.Replace('"', ""))
$arrayListEmails.Add($_.Replace('"', "")) > $null
答案 2 :(得分:0)
也许这个正则表达式可以帮助您:
"([^/\)]+?)"
您必须使用组$1
来获取所需的值。那是没有引号的电子邮件。
答案 3 :(得分:0)
有一种非常简单的方法来清除字符串中的前导和尾随字符。使用.Trim()
字符串方法。 [ grin ]将从目标字符串的末尾删除修剪列表中的每个字符。
# fake reading in a text file
# in real life, use Get-Content
$InStuff = @'
"sample1@gmail.com"
"sample2.test@gmail.com"
"sample3.test.test2@gmail.com"
'@ -split [System.Environment]::NewLine
$DeQuotedEmailList = foreach ($IS_Item in $InStuff)
{
# the trim string is <single><double><single> quotes
# it will remove any leading and/or trailing double quotes
$IS_Item.Trim('"')
}
$DeQuotedEmailList
输出...
sample1@gmail.com
sample2.test@gmail.com
sample3.test.test2@gmail.com