我正在寻找一种快速的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)
基本上,只要两个数字之间用除 的任意数字分隔,然后将它们视为两个独立的数字。
我已经在网上搜索了解决方案,但还没有完全找到我想要的东西。
答案 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