我有一个方法,如果找到一个特殊字符,它会捕获一个if语句.如果找到特殊字符的位置并将其替换为_A,我现在想做什么
一些例子
test#成为 test_A
我#希望#某人#this #the#answer#成为 I_Ahope_Asomeone_Aknows_Athe_Aanswer_A
或者如果它有多个特殊字符
我是否必须遍历整个字符串,当我到达该字符时将其更改为_A或是否有更快的方法来执行此操作?
Mat*_*sen 10
#只是一个像任何其他人一样的角色,你可以使用-replace运算符:
PS C:\>'I#hope#someone#knows#the#answer#' -replace '#','_A'
I_Ahope_Asomeone_Aknows_Athe_Aanswer_A
Run Code Online (Sandbox Code Playgroud)
正则表达式很神奇,你可以定义你喜欢的所有特殊情况(必须转义大括号):
PS C:\>'You?didnt#understand{my?Question#' -replace '[#?\{]','_A'
You_Adidnt_Aunderstand_Amy_AQuestion_A
Run Code Online (Sandbox Code Playgroud)
所以你的功能看起来像这样:
function Replace-SpecialChars {
param($InputString)
$SpecialChars = '[#?\{\[\(\)\]\}]'
$Replacement = '_A'
$InputString -replace $SpecialChars,$Replacement
}
Replace-SpecialChars -InputString 'You?didnt#write{a]very[good?Question#'
Run Code Online (Sandbox Code Playgroud)
如果您不确定要逃避哪些角色,请让regex课程为您完成!
function Replace-SpecialChars {
param(
[string]$InputString,
[string]$Replacement = "_A",
[string]$SpecialChars = "#?()[]{}"
)
$rePattern = ($SpecialChars.ToCharArray() |ForEach-Object { [regex]::Escape($_) }) -join "|"
$InputString -replace $rePattern,$Replacement
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用.NET字符串方法Replace():
'You?didnt#understand{my?Question#'.Replace('#','_A').Replace('?','_A').Replace('{','_A')
Run Code Online (Sandbox Code Playgroud)
但我觉得正则表达式更简洁
| 归档时间: |
|
| 查看次数: |
37062 次 |
| 最近记录: |