我真的希望我能很清楚地说清楚这一点,并且我没有任何运气可以用Google搜索。基本上我有一串电子邮件地址,我将这样表达:
$string = "test@me.com,test2@me2.com;test3@me3.com:test4@me4.com;;::test5@me.com"
我知道我可以像这样分开:
[system.collections.arraylist]$array = $string.Split(":;,,")
$array.Remove("")
以上工作很好,但在这里我必须明确定义分隔符是什么。我有一个正则表达式,然后用来验证电子邮件的结构让我思考。
是否可以通过字符串中的 isn' 来定义拆分?我如何通过与我的正则表达式匹配来验证电子邮件来表达分裂?
答案 0 :(得分:2)
您可以在没有正则表达式的情况下执行此操作。
Split()
方法有an overload,其中包含[char]
和StringSplitOptions
数组 - 您可以使用此方法在{{1 },,
或;
,然后删除所有空条目:
:
这将返回一个字符串数组,其中包含您感兴趣的5个电子邮件地址
答案 1 :(得分:2)
有趣的问题!我想出了这个功能:
function Split-MeNot {
[CmdletBinding()]
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true
)]
[String]
$String ,
[Parameter(Mandatory=$true)]
[Regex]
$Pattern
)
Process {
$anti = New-Object System.Text.StringBuilder($String)
$Pattern.Matches($String) | Sort-Object Index -Descending | ForEach-Object {
$null = $anti.Remove($_.Index, $_.Length)
}
$String.Split($anti.ToString(), [System.StringSplitOptions]::RemoveEmptyEntries)
}
}
[StringBuilder]
对象。我测试了以下内容:
$str = "test@me.com,test2@me2.com;test3@me3.com:test4@me4.com;;::test5@me.com"
$pat = '[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+'
$str | Split-MeNot -Pattern $pat
我还没有做过比这更广泛的测试,但似乎运作良好。
答案 2 :(得分:0)
只需使用powershell的-split
它就可以分割多个角色实例。如果你使你的正则表达式查找任何无效的电子邮件字符的倍数,那么你可以用一个命令进行拆分,如下所示:
$string -split '[^a-zA-Z0-9._%+@-]+'