[英]How to replace character in Powershell with initial character + a space
希望網站上還沒有回答這個問題。 我想用該數字和一個空格替換字符串中的每個數字。 所以這就是我現在所擁有的:
"31222829" -replace ("[0-9]","$0 ")
[0-9] 查找任何數字,並將其替換為該字符和空格。 但是,它不起作用。 我從另一個網站看到使用 $0,但我不確定這意味着什么。我正在尋找的輸出是
3 1 2 2 2 8 2 9
但它只是給了我一個空行。 有什么建議?
豬油派
這可能不是正確的方法,但它有效。
("31222829").GetEnumerator() -join " "
.GetEnumerator
方法迭代字符串中的每個字符-join
運算符然后將所有這些字符與" "
空格連接起來
tl;博士
PS> "31222829" -replace '[0-9]', '$& '
3 1 2 2 2 8 2 9
請注意,輸出字符串有一個尾隨空格,因為輸入 ( [0-9]
) 中的每個數字都被其本身 ( $&
) 替換,后跟一個空格。
至於你嘗試了什么:
"31222829" -replace ("[0-9]","$0 ")
雖然將兩個 RHS 操作數包含在(...)
中不會妨礙功能,但將它們視為一個數組並沒有真正的幫助 - 只需使用,
枚舉它們,不要將它們包含在(...)
。
通常,對 RHS 操作數(要匹配的正則表達式和替換操作數)使用'...'
而不是"..."
,以防止 PowerShell 的字符串擴展(插值)與-replace
運算符最終看到的內容混淆.
舉個例子:由於在替換操作數中使用了"..."
,PowerShell 的字符串插值實際上會預先將$0
擴展為變量,在沒有變量的情況下擴展為空字符串- 這就是您最終看到的原因一個空字符串。
但是,即使您使用了'...'
, $0
在替換操作數中也沒有特殊含義; 相反,您必須使用$&
來表示匹配的字符串,如本答案中所述。
無條件地用空格分隔所有字符:
德魯的有用答案絕對有效。
這是一個更符合 PowerShell 習慣的替代方案:
PS> [char[]] '31222829' -join ' '
3 1 2 2 2 8 2 9
將字符串轉換為[char[]]
將其字符作為數組返回,然后-join
以空格作為分隔符進行連接。
注意:由於-join
僅放置指定的分隔符( ' '
元件之間),將得到的字符串沒有尾隨空格。
您可以使用具有正向預測的正則表達式來避免尾隨空格。 Lookahead 和 Lookbehind 是零長度斷言,類似於^
和$
匹配行的開始/結束。 正則表達式\\d(?=.)
后跟另一個字符時將匹配一個數字。
PS> '123' -replace '\d(?=.)', '$0 '
1 2 3
要驗證沒有尾隨空格:
PS> "[$('123' -replace '\d(?=.)', '$0 ')]"
[1 2 3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.