将字符串中的多个数字拆分为数组
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
我正在寻找一种快速的 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