如何用初始字符+空格替换Powershell中的字符

时间:2019-02-27 01:33:34

标签: powershell

希望此问题尚未在网站上得到回答。我想用该数字和空格替换字符串中的每个数字。所以这就是我现在所拥有的:

puts

[0-9]查找任何数字,并将其替换为该字符和空格。但是,它不起作用。我从另一个网站上看到使用$ 0,但我不确定这是什么意思。我想要的输出是

fprintf

但这只是给我一个空白行。有什么建议吗?

小猪

3 个答案:

答案 0 :(得分:2)

这可能不是正确的方法,但是可以。

("31222829").GetEnumerator() -join " "

.GetEnumerator方法遍历字符串中的每个字符 -join运算符随后会将所有这些字符与" "空格连接

答案 1 :(得分:1)

tl; dr

PS> "31222829" -replace '[0-9]', '$& '
3 1 2 2 2 8 2 9 

请注意,由于输入([0-9])中的每个数字均由其自身($&)替换为空格,因此输出字符串具有尾随空格。


关于您尝试过的事情

  

"31222829" -replace ("[0-9]","$0 ")

  • 虽然将两个RHS操作数包含在(...)中并不妨碍功能,但是将它们视为 array 并没有太大帮助-只需用{{1 }},不要将它们放在,中。

  • 通常,使用(...)而不是'...'作为RHS操作数(要匹配的正则表达式和替换操作数),以防止在PowerShell的操作数之间混淆。字符串扩展(插值)以及"..."运算符最终看到的内容。

    • 案例:由于在替换操作数中使用-replace,PowerShell的字符串插值实际上会将"..."扩展为变量,这在前面没有变量会扩展为空字符串-这就是为什么您最终看到一个空白字符串的原因。

    • 即使您使用过$0'...'在替换操作数中也具有 no 特殊含义;相反,您必须使用$0来表示匹配的字符串,如this answer所述。


要无条件地用空格分隔所有字符:

Drew's helpful answer绝对有效。
这是PowerShell惯用的替代方法:

$&

将字符串投射到PS> [char[]] '31222829' -join ' ' 3 1 2 2 2 8 2 9 会将其字符作为数组返回,然后[char[]]加上一个空格作为分隔符。

注意:由于-join仅将指定的分隔符(-join)放在 元素之间,因此生成的字符串 not 没有尾随空格。

答案 2 :(得分:0)

您可以使用带有 positive lookahead 的正则表达式来避免尾随空格。 Lookahead 和 Lookbehind 是零长度断言,类似于 ^$ 匹配行的开始/结束。正则表达式 \d(?=.) 后跟另一个字符时将匹配一个数字。

PS> '123' -replace '\d(?=.)', '$0 '
1 2 3

要验证没有尾随空格:

PS> "[$('123' -replace '\d(?=.)', '$0 ')]"
[1 2 3]