Regex - извлечение адреса электронной почты из строки в PowerShell - PullRequest
0 голосов
/ 24 октября 2018

Я хочу разобрать адреса электронной почты из строки в PowerShell.

Например, учитывая:

$email = "take this email test@mail.com"
$email2 = "secondmail@mail.com"
$email3 = "thirdmail@mail.com needs extracted"

Я бы получил:

test@mail.com
secondmail@mail.com
thirdmail@mail.com

Домен одинаков для всех этих строк, он всегда будет адресом username@mail.com.

Любая помощь приветствуется!

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Это должно быть довольно просто в PS;

# initialize your string and pattern (you can choose your own pattern)
$message = "I'm a creep.1990_radio@gmail.com, I'm a wierdo_head@gmail.com"
$pattern = "([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})"

# get all the matches and store it in an array
$results = ($message | Select-String $pattern -AllMatches).Matches

# iterate over array to act on those items
foreach ($item in ($results)) { Write-Host $item.Value }

В последней строке вы также можете использовать Write-Host $item для просмотра доступных атрибутов.

0 голосов
/ 24 октября 2018

Вдохновленный этим ответом

Как проверить адрес электронной почты с помощью регулярного выражения?

и этот ответ

Powershell:Извлечь текст из строки

, это помогло бы ...

$email = "take this email test@mail.com"
$email2 = "secondmail@mail.com"
$email3 = "thirdmail@mail.com needs extracted"
$email4 = "fourthmail@mail.com and fifthmail@mail.com and sixthmail@mail.com"

$email_regex = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|`"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*`")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"

$extracted = [regex]::match($email, $email_regex).Value
$extracted

$extracted = [regex]::match($email2, $email_regex).Value
$extracted

$extracted = [regex]::match($email3, $email_regex).Value
$extracted

[regex]::matches($email4, $email_regex)|select value

последняя строка показывает, как извлечь больше сообщений электронной почты из одного текста

0 голосов
/ 24 октября 2018

Вот еще один способ:

$email = "take this email test@mail.com"
$email2 = "secondmail@mail.com"
$email3 = "thirdmail@mail.com needs extracted"

$array = @($email,$email2,$email3)

foreach($a in $array){

    $split = $a.Split(" ")
    $email = ($split | ? {$_ -match "@"})

    $email
}
0 голосов
/ 24 октября 2018

Вы можете использовать это регулярное выражение для извлечения электронной почты для вашего конкретного доменного имени.

\w+@mail.com

Пока часть имени пользователя в вашем электронном письме содержит только алфавит, цифры и подчеркивания.Иначе вместо \ w вам, возможно, придется написать класс символов, подобный этому,

[a-zA-Z0-9_.-]+@mail.com

Как вы можете видеть, он содержит алфавиты, числа, знак подчеркивания, точку, дефис

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...