Добавлять символ после каждого совпадения с регулярным выражением в PowerShell
Мне было интересно, можно ли добавить символ (который будет использоваться в качестве разделителя позже) к каждому экземпляру соответствия регулярному выражению в строке.
Я анализирую текст для строки между < >, и у меня есть рабочий шаблон регулярного выражения - хотя это сворачивает каждый экземпляр совпадения.
То, что я хотел бы сделать, это добавить каждый экземпляр совпадения с помощью, чтобы я мог позже вызвать метод.split(',') и получить коллекцию строк, через которую я могу пройти цикл.
$testString = "<blah@gmail.com><blah1@gmail.com>"
$testpattern = [regex]::Match($testString, '(?<=<)(.*)(?=>)').Value
$ testPattern теперь будет "blah@gmail.combblah1@gmail.com"
Я хотел бы добавить разделитель между каждым экземпляром совпадения, чтобы вызвать метод.split() для работы с коллекцией после факта.
2 ответа
Я знаю, что это не единственный способ справиться с вышеуказанной проблемой и, безусловно, не самый эффективный - но в итоге я сделал следующее.
Таким образом, чтобы переформулировать вопрос, мне нужно проанализировать заголовки писем (в строку), для всех адресов 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 += $_}
$testpattern
является blah@gmail.com><blah1@gmail.com
Вы должны использовать <(.*)><(.*)>
сохранить оба адреса электронной почты, а затем объединить обе строки: $testpattern = $testpattern[0] + "your string you want inbetween" + $testpattern[1]
Не уверен насчет 0 и 1, зависит от языка.
Еще один момент, будьте осторожны, если в электронной почте есть пробелы или недопустимые символы, они все равно будут их захватывать. вы должны использовать что-то вроде <([a-zA-Z0-9\-@\._]*\@[a-zA-Z0-9-]*\.[a-z-A-Z]*)><([a-zA-Z0-9\-@\._]*\@[a-zA-Z0-9-]*\.[a-z-A-Z]*)>