Powershell 正则表达式查找电子邮件并将电子邮件替换为 (<email>)

Powershell Regex find emails and replace email with (<email>)

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

$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), "<$_>" }

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

我建议使用 Get-Content 和 Set-Content,并使用管道将 link 所有内容组合在一起。尽管对于非常大的文件,这可能会变慢并且占用大量内存。

类似于:

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