如何使用PowerShell的-split运算符并保留分隔所用子字符串?
解决PowerShell字符串分割保留数字前缀的问题
针对你遇到的需求,这里提供两种可行的方法:
方法一:正则匹配提取(推荐)
直接用正则表达式匹配所有「数字+后续非数字内容」的片段,一步到位得到目标数组:
$inputStr = "1one2two3three4four5five" $result = [regex]::Matches($inputStr, '\d\D+') | ForEach-Object { $_.Value } $result
执行后输出:
1one 2two 3three 4four 5five
如果原字符串开头有多余空格,先加$inputStr = $inputStr.Trim()处理即可。
方法二:带捕获组的分割拼接
如果坚持要用-split命令,可以通过捕获组保留分隔符(数字),再将数字和后续内容拼接:
$inputStr = "1one2two3three4four5five" $splitArr = $inputStr -split '(\d)' $result = for ($i = 1; $i -lt $splitArr.Count; $i += 2) { $splitArr[$i] + $splitArr[$i + 1] } $result
原理:-split '(\d)'会把每个数字作为捕获组保留在分割结果中,得到的数组是'', '1', 'one', '2', 'two'...,遍历数组时每两个元素(数字+后续内容)拼接成目标项。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

