如何在powershell

时间:2016-05-31 09:37:21

标签: regex string powershell powershell-v3.0

我需要在powershell中使用正则表达式来按字符串 ## 拆分字符串,并将字符串移到另一个字符(; )。

我有以下字符串。

$temp = "admin@test.com## deliver, expand;user1@test.com## deliver, expand;group1@test.com## deliver, expand;"

现在,我想拆分此字符串并仅将电子邮件ID转换为新的数组对象。我的预期输出应该是这样的。

admin@test.com
user1@test.com
group1@test.com

要获得以上输出,我需要按字符 ## 拆分字符串,然后删除子字符串 - 分号(; )。

有人可以帮我写一个正则表达式查询来实现PowerShell中的这个需求吗?

2 个答案:

答案 0 :(得分:4)

如果您希望在方法中使用基于正则表达式的拆分,可以使用##[^;]*;正则表达式和此代码,该代码也会删除所有空值(使用| ? { $_ }):

$res = [regex]::Split($temp, '##[^;]*;') | ? { $_ }

##[^;]*;匹配:

  • ## - 加倍#
  • [^;]* - 除;
  • 以外的零个或多个字符
  • ; - 文字;

请参阅regex demo

enter image description here

答案 1 :(得分:3)

使用[regex]::Matches获取正则表达式的所有匹配项。如果这适合您,您可能不需要首先拆分字符串:

\b\w+@[^#]*

Regular expression visualization

Debuggex Demo

PowerShell代码:

[regex]::Matches($temp, '\b\w+@[^#]*') | ForEach-Object { $_.Groups[0].Value }

<强>输出:

admin@test.com
user1@test.com
group1@test.com