使用Powershell从带有正则表达式的字符串中提取特定数据

时间:2014-03-12 04:19:38

标签: powershell powershell-v2.0

我在powershell中返回了这样的数据:

1)Open;#1

2)Open;#1;#Close;#2;#pending;#6

3)Closed;#5

但我想要这样的输出:

1)1 Open

2)

1 Open

2 Close

6 pending

3)

5 Closed

代码:

$lookupitem = $lookupList.Items
$CMRSItems = $list.Items | where {$_['ID'] -le 5}
$CMRSItems | ForEach-Object {

$realval =  $_['EventType']
Write-Host "RefNumber: " $_['RefID']
Write-Host $realval

}

任何帮助都会受到赞赏,因为我的PowerShell并不是那么好。

1 个答案:

答案 0 :(得分:1)

如果没有正则表达式,您可以执行以下操作:

Ignore everything up to the first ')' character
Split the string on the ';' character
foreach pair of the split string
    the state is the first part (ignore potentially leading '#')
    the number is the second part (ignore leading '#')

或者你可以使用带有以下正则表达式的.NET System.Text.RegularExpressions.Regex类来完成它:

(?:#?(?<state>[a-zA-Z]+);#(?<number>\d);?)

Captures方法返回的MatchCollection上的Matches属性将是一个集合,其中每个项目将包含Group集合中的两个实例;分别命名为statenumber