Получить текст между двумя символами - PullRequest
0 голосов
/ 23 мая 2019

У меня есть простой текстовый файл, как показано ниже:

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

2 голосов
/ 23 мая 2019

В противном случае вы можете это сделать (import-csv удаляет двойные кавычки в столбцах):

$Yourlist=import-csv "C:\temp\emailsList.txt" -Header Email
$Yourlist | %{ "email : {0}" -f $_.Email }
0 голосов
/ 23 мая 2019

есть удивительно простой способ убрать начальные и конечные символы из строки.используйте строковый метод .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
0 голосов
/ 23 мая 2019

Может быть, это регулярное выражение может помочь вам:

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

Вы должны использовать группу $1, чтобы получить желаемое значение. Это письмо без кавычек.

0 голосов
/ 23 мая 2019

Потому что ваши письма имеют цитату :) Попробуйте это

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