PowerShell含空格字符串替换失效,咨询替换为单个单词的方法
PowerShell含空格字符串替换失效的解决办法
先确认是否赋值回去:PowerShell字符串是不可变的,
Replace方法返回新字符串,不会直接修改原字段值,必须把结果赋值回去才会生效:$_.Fields[$field.Name].Value = $_.Fields[$field.Name].Value.Replace("abc gcb","simple")要是处理的是只读对象,得先把值取出来处理完再想办法更新。
检查空格是否是普通空格:有时候看起来是空格,实际是全角空格、制表符这类特殊空白字符。可以先打印字符的ASCII码确认:
$targetValue = $_.Fields[$field.Name].Value $targetValue.ToCharArray() | ForEach-Object { [int]$_ }普通空格ASCII码是32,全角是12288,制表符是9。如果是特殊空白,要么直接替换对应字符,要么用正则匹配任意空白:
# 匹配一个或多个任意空白字符(空格、制表符等) $_.Fields[$field.Name].Value = [regex]::Replace($_.Fields[$field.Name].Value, "abc\s+gcb", "simple")排查大小写问题:
Replace默认区分大小写,如果原字符串大小写和你写的不匹配(比如ABC GCB),替换就没效果。可以用不区分大小写的替换方式:# 正则不区分大小写替换 $_.Fields[$field.Name].Value = [regex]::Replace($_.Fields[$field.Name].Value, "abc gcb", "simple", [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)确认字段值的类型和有效性:先输出值和类型,确保它是字符串且不为空:
Write-Host "值:$($_.Fields[$field.Name].Value),类型:$($_.Fields[$field.Name].Value.GetType().Name)"如果不是字符串,先转成字符串再替换:
$_.Fields[$field.Name].Value = [string]$_.Fields[$field.Name].Value.Replace("abc gcb","simple")
内容的提问来源于stack exchange,提问作者MBN
相关产品推荐
相关产品推荐

