簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM