2016-12-30 3 views
0

Мне было интересно, можно ли добавить символ (который будет использоваться в качестве разделителя позже) для каждого экземпляра регулярного выражения в строке.Добавить символ после каждого экземпляра регулярного выражения в PowerShell

Я разбираю текст для строки между <> и имеет рабочий шаблон регулярного выражения - хотя это сворачивает каждый экземпляр совпадения.

Что я хотел бы сделать, это добавить каждый экземпляр совпадения с помощью a, так что я могу позже вызвать метод .split (',') и получить набор строк, через который я могу пройти.

$testString = "<[email protected]><[email protected]>" 
$testpattern = [regex]::Match($testString, '(?<=<)(.*)(?=>)').Value 

$ TestPattern теперь будет «бла @ gmail.combblah1 @ gmail.com»

То, что я хотел бы, чтобы добавить разделитель между каждым экземпляром матча, чтобы вызвать .split () метод работы с коллекцией после факта.

+0

'$ СравниваемаяСтрока -replace '<([^<>] *)>', '$ 1;'' –

+0

Привет Mathias, спасибо за ответ - и эта схема работает ... однако, что мне нужно сделать является совпадением и добавляется в линию. Проблема, с которой я столкнулась, заключается в том, что когда я сопоставляю шаблон для адресов электронной почты, все адреса объединяются без разделителя, который я могу использовать для дальнейшего анализа. –

ответ

0

Я знаю, что это не единственный способ справиться с проблемой выше, и определенно не самый эффективный - но я закончил делать следующее.

Так что, чтобы повторить вопрос, мне нужно разобрать заголовки электронной почты (в строке), для всех smtp-адресов (значение между '<' и '>') и сохранить все адреса в коллекции после факта.

 $EMLToCol = @() 

     $parseMe = $CDOMessage.to 
     # select just '<emailAddress>' 
     $parsed = Select-String -Pattern '(<.*?>)+' -InputObject $parseMe -AllMatches | ForEach-Object { $_.matches } 
     # remove this guy '<', and this guy '>' 
     $parsed = $parsed.Value | ForEach-Object {$_ -replace '<' -replace '>'} 
     # add to EMLToCol array 
     $parsed | ForEach-Object {$EMLToCol += $_} 
0

$testpattern является [email protected]><[email protected]

Вы должны использовать <(.*)><(.*)> сохранить как адрес электронной почты, а затем объединить обе строки: $testpattern = $testpattern[0] + "your string you want inbetween" + $testpattern[1]

Не уверен, 0 и 1, в зависимости от языка.

Еще один момент, будьте осторожны, если для электронной почты есть некоторые пробелы или недопустимые символы, они все равно захватят их. вы должны использовать что-то вроде <([a-zA-Z0-9\[email protected]\._]*\@[a-zA-Z0-9-]*\.[a-z-A-Z]*)><([a-zA-Z0-9\[email protected]\._]*\@[a-zA-Z0-9-]*\.[a-z-A-Z]*)>

Смежные вопросы