Добавление символа после каждого экземпляра соответствия regex в PowerShell

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

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

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

$testString = "<blah@gmail.com><blah1@gmail.com>"
$testpattern = [regex]::Match($testString, '(?<=<)(.*)(?=>)').Value

$testPattern теперь будет «blah@gmail.combblah1@gmail.com»

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

2 ответа

  1. $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]*)>

  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 += $_}