将多个数字从一个字符串拆分为一个数组

时间:2019-01-29 21:47:38

标签: powershell powershell-v4.0

我正在寻找一种快速的PowerShell单行代码来分割这样的字符串:

"123.456,789 101-202_303%404..505(606)      707 a bunch of text 808 %%%*&#!@#$%^&*() 909"

放入这样的数组:

(123,456,789,101,202,303,404,505,606,707,808,909)

基本上,只要两个数字之间用除 的任意数字分隔,然后将它们视为两个独立的数字。

我已经在网上搜索了解决方案,但还没有完全找到我想要的东西。

3 个答案:

答案 0 :(得分:4)

我现在正在打电话,所以我不会做太多打字。

$str -split '\D+' | Sort-Object -Unique

应该这样做。


除此之外,在-split之后,元素(尽管是数字)仍然是字符串。因此,执行上述排序将对字母数字而不是数字进行排序。由于在该示例中,所有数字均为三位数,因此排序看起来很好,但是如果其中的数字少或多,那么您会明白我的意思:

假设您的字符串如下所示:

$str = "123.456,789;12 101-202_303%404..505(606)  7    707 a bunch of text 808 %%%*&#!@#$%^&*() 909"

拆分和排序将为您提供一个数组,例如:

101
12
123
202
303
404
456
505
606
7
707
789
808
909

如果您仅更改Sort-Object即可:

$str -split '\D+' | Sort-Object -Property {[int]$_} -Unique

输出将按数字排序,因此结果如下:

7
12
101
123
202
303
404
456
505
606
707
789
808
909

当然,在此之后连接元素成为逗号分隔的字符串就像

($str -split '\D+' | Sort-Object -Property {[int]$_} -Unique) -join ','

输出:

7,12,101,123,202,303,404,456,505,606,707,789,808,909

答案 1 :(得分:1)

您可以使用正则表达式替换所有无数字,然后清除空数组部分

"123.456,789 101-202_303%404..505(606)      707 a bunch of text 808 %%%*&#!@#$%^&*() 909" -split '\D' | ?({ $_ -ne "" })

答案 2 :(得分:0)

$x = "123.456,789 101-202_303%404..505(606)      707 a bunch of text 808 %%%*&#!@#$%^&*() 909"
$y = $x -split '[^\d]+(?=\d+)'

结果:

$y -join ','  #   123,456,789,101,202,303,404,505,606,707,808,909