Powershell Regex使用(<email>)</email>查找电子邮件并替换电子邮件

时间:2015-01-14 20:14:16

标签: regex powershell

我正在尝试在.eml文件中搜索所有电子邮件,并添加&lt;&gt;找到的每封电子邮件之间的括号,这里是我的代码,它会输出应该发生的内容,但不会写入文件。注意,我需要保留文件中的现有数据(标题,正文等),只替换电子邮件地址。

$rawtext = [IO.File]::ReadAllText("c:\scripts\emailex.eml")
$regex = [regex]"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b" 
$regex.Matches($rawtext) | ForEach-Object{ $_ -replace $($_.Value), "<$_>" }

1 个答案:

答案 0 :(得分:0)

我不相信您的电子邮件Regex完全可靠,但您只是在阅读该文件而不是回写它。

我建议使用Get-Content和Set-Content并使用管道将所有内容链接在一起。虽然对于非常大的文件,这可能会变得很慢并且内存密集。

类似的东西:

(Get-Content C:\test\test.txt) | 
Foreach-Object {$_ -replace "(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b",'<$0>'} | 
Set-Content C:\test\test.txt

运行上面的Powershell可以从

转换文本文件C \ test \ test.txt
Hi my email is bob@gmail.com
I like to email sally@gmail.com

Hi my email is <bob@gmail.com>
I like to email <sally@gmail.com>