2016-12-30 1 views
0

Ich frage mich, ob es möglich war, ein Zeichen (später als Trennzeichen zu verwenden) an jede Instanz einer Regex-Übereinstimmung in einer Zeichenfolge anzuhängen.Zeichen nach jeder Instanz einer Regex-Übereinstimmung in PowerShell anhängen

Ich Parsing Text für eine Zeichenfolge zwischen <>, und haben eine funktionierende Regex-Muster - obwohl dies jede Instanz der Übereinstimmung zusammenbricht.

Was ich tun möchte, ist jede Instanz einer Übereinstimmung mit einem anhängen, so kann ich später die .split (',') -Methode aufrufen und eine Sammlung von Zeichenfolge, die ich durchschleifen kann.

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

$ Testbild wird nun „blah @ gmail.combblah1 @ gmail.com“

Was würde Ich mag, ist ein Trennzeichen zwischen den einzelnen Instanz des Spiels an, die .split zu nennen () Methode, mit einer Sammlung nach der Tat zu arbeiten.

+0

'$ teststring -replace '<([^<>] *)>', '$ 1;'' –

+0

Hallo Mathias, danke für die Antwort - und das Muster funktioniert ... aber was ich tun muss, ist übereinstimmen und inline anhängen. Das Problem, das ich habe, ist, dass, wenn ich ein Muster für E-Mail-Adressen anpasse, alle Adressen ohne Trennzeichen verkettet sind, das ich zum weiteren Parsen verwenden kann. –

Antwort

0

verwenden. Ich weiß, dass dies nicht der einzige Weg ist, um das Problem oben zu behandeln, und auf jeden Fall nicht die effizienteste - aber ich habe das folgende getan.

Um die Frage neu zu formulieren, muss ich E-Mail-Header für alle smtp-Adressen (Wert zwischen '<' und '>') analysieren und alle Adressen in einer Sammlung nach der Tatsache speichern.

 $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 ist [email protected]><[email protected]

Sie <(.*)><(.*)> verwenden sollten sowohl E-Mail-Adresse zu halten und dann beide Strings verketten: $testpattern = $testpattern[0] + "your string you want inbetween" + $testpattern[1]

Nicht sicher 0 und 1, abhängig von der Sprache.

Ein weiterer Punkt, seien Sie vorsichtig, wenn es einige Leerzeichen oder ungültige Zeichen für E-Mail gibt, wird es immer noch erfassen. Sie sollten etwas wie <([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]*)>

Verwandte Themen