获取两个字符之间的文本

Get text between two characters

我有一个纯文本文件,如下所示:

"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

好像正则表达式是用双引号引起来的....

因为你的电子邮件有引用 :) 试试这个

write-host ("email: " + $_.Replace('"', ""))
$arrayListEmails.Add($_.Replace('"', "")) > $null

否则你可以这样做(import-csv 删除列上的 double-quote):

$Yourlist=import-csv "C:\temp\emailsList.txt" -Header Email
$Yourlist | %{ "email : {0}" -f $_.Email }

也许这个正则表达式可以帮助你:

"([^/\)]+?)"

您必须使用组 来获取您想要的值。这是不带引号的电子邮件。

有一种非常简单的方法可以清除字符串中的前导字符和尾随字符。使用 .Trim() 字符串方法。 [grin] 它将从目标字符串的末尾删除 trim 列表中的每个字符。

# 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