首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

PowerShell 字串清理實戰:Trim 移除空格、點號、減號、換行符完整指南

     編輯:更多程式設計知識

PowerShell 的 Trim() 方法功能強大,不僅能移除首尾空白字元,更可指定自訂字元集合一次清理多種雜訊字元 (如點號、減號、製表符、換行符)。本文詳細說明 Trim、TrimStart、TrimEnd 的語法、字元集合運作機制、實戰範例與常見誤區。

方法語法

# 移除首尾指定字元 (預設空白字元: space, tab, newline, carriage return)
$string.Trim([char[]]chars)

# 僅移除開頭
$string.TrimStart([char[]]chars)

# 僅移除結尾
$string.TrimEnd([char[]]chars)

字元集合運作機制

  • 參數為 字元陣列,而非字串模式。
  • 只要首尾字元出現在集合中,就會被移除,直到遇到不在集合中的字元為止。
  • 不會移除中間的字元,即使該字元在集合中。
  • 順序無關,集合是「集合」而非「序列」。

核心範例

1. 移除空格、點號、減號、換行符 (原文範例)

$text = @"
... Hello
...---
"@

# 字元集合:空格、點號、減號、製表符、換行符、歸位符
$clean = $text.Trim(" .-`t`n`r")
# 結果: "Hello"

# 逐步拆解
$text.Trim(".")      # 移除首尾點號
$text.Trim("-")      # 移除首尾減號
$text.Trim("`n`r")   # 移除首尾換行/歸位

2. 清理檔案路徑/URL 首尾斜線

$path = "\\server\share\folder\\"
$cleanPath = $path.Trim('\')           # "server\share\folder"

$url = "https://example.com/api//"
$cleanUrl = $url.Trim('/')              # "https://example.com/api"

# 同時處理正反斜線
$mixed = "/path\to\resource\\"
$clean = $mixed.Trim('/\')              # "path\to\resource"

3. 清理 CSV/匯入資料的引號與空白

$raw = '  "John Doe"  ,  "Jane Smith"  '
# 先分割再清理
$fields = $raw.Split(',').ForEach({ $_.Trim(' "') })
# 結果: @("John Doe", "Jane Smith")

4. 移除特定 Unicode 字元 (如零寬空格、BOM)

$text = "​Hidden​Text"  # 含零寬空格 U+200B
$clean = $text.Trim([char]0x200B)  # 移除首尾零寬空格
$clean = $text.Trim([char]0xFEFF)  # 移除 BOM (U+FEFF)

Trim vs Replace vs Regex 對照

方法適用場景範例注意
Trim(chars)移除首尾特定字元集合" abc ".Trim() → "abc"不影響中間
TrimStart/End單側清理"---abc".TrimStart('-') → "abc"
Replace(old, new)全域替換 (含中間)"a-b-c".Replace('-', '') → "abc"字串替換,非字元集合
-replace 'pattern', ''正則表達式替換" a b " -replace '^\s+|\s+$', '' → "a b"功能最強,效能稍低

常見誤區與陷阱

誤區正確理解
Trim("abc") 會移除首尾的 "abc" 子字串錯誤。它會移除首尾任意屬於 {a, b, c} 的字元。"cababc".Trim("abc") → 空字串 (所有字元都在集合中)
想移除中間的字元用 Replace 或 -replace,Trim 只處理首尾
傳入字串而非字元陣列PowerShell 自動將字串轉為字元陣列,Trim(".-") 等同 Trim(@('.','-')),行為一致
以為 Trim() 會移除所有 Unicode 空白字元預設僅移除 ASCII 空白 (U+0020, U+0009, U+000A, U+000D)。完整 Unicode 空白需自行列舉或用 Regex ^\p{Zs}+|\p{Zs}+$

實戰一鍵清理函數

function Clean-String {
    param(
        [string]$InputString,
        [char[]]$CharsToTrim = " `t`n`r",  # 預設空白字元
        [switch]$TrimQuotes
    )
    $chars = $CharsToTrim
    if ($TrimQuotes) { $chars += @('"', "'") }
    $InputString.Trim($chars)
}

# 使用
$dirty = '  "  Hello World  "  '
Clean-String $dirty -TrimQuotes  # => Hello World

最佳實務總結

  1. 首選 Trim() 清理首尾雜訊:語意清晰、效能最佳、無正則開銷。
  2. 字元集合明確列舉:Trim(" .,-_") 比正則更易讀維護。
  3. 中間字元清理用 Replace/-replace:Trim 無法觸及中間。
  4. 處理 Unicode/特殊字元:用 [char]0xXXXX 精確指定碼位。
  5. 管線中批次清理:$files | ForEach-Object { $_.Name.Trim('_') }。

掌握 Trim 系列方法的字元集合語意,能讓你的 PowerShell 字串清理代碼更簡潔、高效、易維護,是資料清洗、日誌解析、檔名正規化等日常運維任務的必備技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved