如何使用replace方法在字符串含指定子串时完整替换该字符串?
实现包含特定子串时替换整个字符串的方案
嘿,我明白你的需求啦——只要字符串里包含"STRING"这个子串,就把整个字符串替换成"STRING"对吧?你之前用的$a.replace('*STRING*','STRING')没生效,是因为PowerShell里的String.Replace()方法只支持精确字面量匹配,它会直接去找字符串里的*STRING*这个完整子串,而不是把*当成通配符来识别哦。
下面给你两种可行的实现方式:
方法1:使用PowerShell -replace 操作符(正则表达式匹配)
-replace 支持正则表达式,我们可以用正则来匹配任意包含"STRING"的整个字符串,然后替换成目标值:
$a = "abc123STRINGabc123" $a = $a -replace '.*STRING.*', 'STRING' # 输出结果就是 "STRING"
这里的正则.*STRING.*解释:
.匹配任意单个字符(除了换行)*表示前面的字符可以出现0次或多次- 整个表达式的意思就是:从字符串开头到结尾,只要中间包含"STRING",就匹配整个字符串
如果原字符串不包含"STRING",这个正则会匹配失败,原字符串会被保留。
方法2:先判断再赋值(更直观的逻辑)
如果你觉得正则有点绕,也可以先通过通配符判断字符串是否包含目标子串,再直接赋值:
$a = "abc123STRINGabc123" if ($a -like "*STRING*") { $a = "STRING" } # 输出结果同样是 "STRING"
这里的-like是PowerShell的通配符匹配操作符,*STRING*表示任意位置包含"STRING"的字符串,判断成立后直接把变量赋值为"STRING",逻辑非常清晰。
内容的提问来源于stack exchange,提问作者SAS
相关产品推荐
相关产品推荐

