将字符串中的多个数字拆分为数组

Split multiple numbers from a string into an array

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

“123.456,789 101-202_303%404..505(606) 707 一堆文本 808 %%%*&#!@#$%^&*() 909”

进入这样的数组:

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

基本上,任何时候两个数字被任何 除了 一个数字分开,然后将它们视为两个单独的数字。

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

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

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

我现在正在 phone,所以我不会打太多字..

$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
$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