2016-12-30 6 views
0

文字列内の正規表現の一致の各インスタンスに文字を追加することができたのかどうか疑問に思っていました(後で区切り記号として使用する)。PowerShellで正規表現の各インスタンスの後に文字を追加する

私は<>の間の文字列のテキストを解析していますが、これは動作する正規表現パターンです - これはマッチの各インスタンスを折りたたみます。

私がしたいのは、aとの一致の各インスタンスを追加することです。後で.split( '、')メソッドを呼び出して、ループできる文字列のコレクションを持っています。

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

$テストパターンは、今私がしたいどのような「何とか@ gmail.combblah1 @ gmail.com」

になりますと、(.splitを呼び出すために、試合の各インスタンス間の区切り文字を追加することです)メソッドを呼び出して、その事実の後にコレクションを処理します。 、0と1わからない$testpattern = $testpattern[0] + "your string you want inbetween" + $testpattern[1]

を、言語に依存します。

+0

'$たTestString -replace '<([^<>] *)>'、 '$ 1;'' –

+0

こんにちはマティアスは、返事をありがとう - 私は何をする必要があるか、しかし...そして、そのパターンは、作業を行います一致し、インラインで追加されます。私が抱えている問題は、電子メールアドレスのパターンに一致すると、すべてのアドレスが、さらに解析するために使用できる区切り文字なしで連結されるということです。 –

答えて

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]

です。

メールにスペースや無効な文字が含まれている場合は、それでも注意が必要です。 <([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]*)>

関連する問題