获取两个字符之间的文本

时间:2019-05-23 17:02:57

标签: regex powershell powershell-v2.0 regex-greedy

我有一个如下的纯文本文件:

"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

似乎正则表达式被双引号了。。。

4 个答案:

答案 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