Regex 获取两个字符之间的文本

Regex 获取两个字符之间的文本,regex,powershell,powershell-2.0,regex-greedy,Regex,Powershell,Powershell 2.0,Regex Greedy,我有一个纯文本文件,如下所示: "sample1@gmail.com" "sample2.test@gmail.com" "sample3.test.test2@gmail.com" 等等 现在,使用Powershell,我正在尝试逐行读取此纯文本文件,并在不使用双引号的情况下读取电子邮件,并将其添加到数组列表中: $arrayListEmails = New-Object System.Collections.ArrayList $regex = '"([^/)]+)"' [System.

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

"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"
等等

但我想要以下(不带双引号的电子邮件):


似乎正则表达式采用了双引号…

因为您的电子邮件中有引号:)试试这个

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

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

write-host ("email: " + $_.Replace('"', ""))
$arrayListEmails.Add($_.Replace('"', "")) > $null
否则您可以这样做(导入csv删除列上的双引号):

否则您可以这样做(导入csv删除列上的双引号):


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

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

您必须使用组
$1
来获取所需的值。这是一封没有引号的电子邮件。

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

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

您必须使用组
$1
来获取所需的值。这是一封没有引号的电子邮件。

有一种非常简单的方法可以清除字符串中的前导字符和尾随字符。使用
.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

有一种非常简单的方法可以清除字符串中的前导字符和尾随字符。使用
.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

是的,我的电子邮件在纯文本文件中有引号。因此,在将邮件存储到数组列表之前,我使用正则表达式从邮件阅读的开始和结束处消除它们,但正则表达式似乎也会获取引号,而不是忽略它们。您的正则表达式(如果正确)不会消除引号,但只过滤您的列表,然后您的电子邮件将显示在最终列表中是的,我的电子邮件在纯文本文件中有引号。出于这个原因,我使用正则表达式在将其存储在数组列表中之前,从每个电子邮件读取的开始和结束消除它们,但正则表达式似乎也会获得引号,而不是忽略它们。您的正则表达式(如果正确)不要删除引号,只过滤你的列表,然后你的电子邮件就会出现在你的最终列表中。如果你在每一行上使用
.Trim(“”)
,你会得到一行,在Trim字符串中没有前导/尾随字符。在这种情况下,如果你使用
.Trim(“”),它会删除前导和尾随双引号。[grin]
在每一行中,您将获得修剪字符串中不包含前导/尾随字符的行。在这种情况下,它将删除前导和尾随双引号。[咧嘴笑]我喜欢这个解决方案。无需使用额外的功能,如修剪,更换…我喜欢这个解决方案。不需要使用额外的功能,如修剪,更换。。。