#
就像任何其他字符一样,您可以使用 -replace
运算符:
PS C:\>'I#hope#someone#knows#the#answer#' -replace '#','_A'
I_Ahope_Asomeone_Aknows_Athe_Aanswer_A
正则表达式很神奇,您可以定义所有您想要的特殊情况(大括号必须被转义):
正则表达式是魔法,您可以定义所有您喜欢的特殊情况(大括号需要被转义):
PS C:\>'You?didnt#understand{my?Question#' -replace '[#?\{]','_A'
You_Adidnt_Aunderstand_Amy_AQuestion_A
所以你的函数可能看起来像这样:
function Replace-SpecialChars {
param($InputString)
$SpecialChars = '[#?\{\[\(\)\]\}]'
$Replacement = '_A'
$InputString -replace $SpecialChars,$Replacement
}
Replace-SpecialChars -InputString 'You?didnt#write{a]very[good?Question#'
如果您不确定要进行转义的字符,请让regex
类为您完成!
function Replace-SpecialChars {
param(
[string]$InputString,
[string]$Replacement = "_A",
[string]$SpecialChars = "#?()[]{}"
)
$rePattern = ($SpecialChars.ToCharArray() |ForEach-Object { [regex]::Escape($_) }) -join "|"
$InputString -replace $rePattern,$Replacement
}
您也可以使用.NET字符串方法Replace()
:
'You?didnt#understand{my?Question#'.Replace('#','_A').Replace('?','_A').Replace('{','_A')
但我觉得使用正则表达式的方式更加简洁。
#
。 - Mathias R. Jessen