希望此问题尚未在网站上得到回答。我想用该数字和空格替换字符串中的每个数字。所以这就是我现在所拥有的:
puts
[0-9]查找任何数字,并将其替换为该字符和空格。但是,它不起作用。我从另一个网站上看到使用$ 0,但我不确定这是什么意思。我想要的输出是
fprintf
但这只是给我一个空白行。有什么建议吗?
小猪
答案 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]