本帖最后由 WHY 于 2017-8-20 14:59 编辑
一个是 PowerShell 内置的替换运算符,一个是 .NET Framework 中 System.Text.RegularExpressions.Regex 类的静态方法。
-replace 替换运算符一次性替换全部(global 全局标志为 True),Replace 方法可以替换其中的某一次或几次。- ([regex]'(?i)a').Replace('aaaa', 'b', 1, 2) #替换 "aaaa" 中的 "a" 为 "b",替换1次,从第3个字符开始替换
复制代码 如果需要对捕获的子匹配调用其它函数方法,比如将子匹配转换大小写,-replace 替换运算符办不到,只能调用 Replace 方法。
这种办法是错误的:- 'how are you' -replace '\b[a-z]', '$&'.ToUpper()
复制代码 这种办法是正确的:- [regex]::Replace('how are you', '\b[a-z]', {param($a); $a.Groups[0].Value.ToUpper()})
复制代码 另外,.net 正则表达式中的一些选项,如 RightToLeft、ECMAScript、CultureInvariant 等不能用于 -replace 运算符,因为这些选项没有提供内联字符。 |