在PowerShell中的每个正则表达式匹配实例后追加字符

时间:2016-12-30 00:49:05

标签: regex powershell mime mime-message

我想知道是否可以在字符串中的每个正则表达式匹配实例中附加一个字符(以后用作分隔符)。

我正在为<之间的字符串解析文本>,并且有一个正常工作的正则表达式模式 - 虽然这会折叠匹配的每个实例。

我想要做的是将每个匹配的实例附加到a,所以我稍后可以调用.split(',')方法并拥有一个我可以遍历的字符串集合。

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

$ testPattern现在将成为“blah @ gmail.combblah1 @ gmail.com”

我想要的是在每个匹配实例之间添加一个分隔符,以便在事后调用.split()方法来处理一个集合。

2 个答案:

答案 0 :(得分:0)

$testpatternblah@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]*)>

这样的东西

答案 1 :(得分:0)

我知道这不是处理上述问题的唯一方法,绝对不是最有效的 - 但我最终做了以下事情。

所以为了重申这个问题,我需要为所有smtp地址('&lt;'和'&gt;'之间的值)解析电子邮件标题(到行),并在事后存储集合中的所有地址

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