0

使用 Powershell 使用 -match 将字符串分解为模式我只看到模式的最后一次出现:

$a = "1 0 8 string a 8 string b 10 final string"
$a -match '^(\d+) (\d+) ((\d+) (\D+)){0,}'
$matches

节目

True

Name   Value
----   -----
5      final string
4      10
3      10 final string
2      0
1      1
0      1 0 8 string a 8 string b 10 final string

我怎样才能让它填充“8”、“字符串 a”、“8”、“字符串 b”等???

谢谢!

4

2 回答 2

1

你想要这个吗?

([regex]::Matches($a,'^(\d+) (\d+) ((\d+) (\D+)){0,}') | select -expa groups )[3] |
 select -expa captures | select -expa value | -split '(\d+)' | ? { $_ } | % { $_.trim() }

或者

((([regex]::Matches($a,'^(\d+) (\d+) ((\d+) (\D+)){0,}') | select -expa groups )[3] | select -expa captures | select -expa value) -split '(\d+)' | ? { $_ } | % { $_.trim() } | 
% { "`"$_`""} ) -join ','
于 2013-02-14T16:56:25.450 回答
0

我相信您可以使用类似的东西$matches.Group[3].Capture[0]来获取该单个组匹配的所有文本。

我对 powershell 语法不是很熟悉,但这里是您需要的库的参考:http:
//msdn.microsoft.com/en-us/library/30wbz966.aspx#CaptureCollection

于 2013-02-14T16:07:25.740 回答