使用PowerShells regex解析和替换多个变体

使用PowerShells regex解析和替换多个变体,regex,powershell,Regex,Powershell,使用下面的代码解析文本文档会匹配“333”的每个实例,但是我只希望更改下面的三个示例 (Get-Content input.json) | ForEach-Object { $_ -replace '333', '666' } | Set-Content output.json 这应该改变: “se333”→ “se666” “SE333”→ “SE666” “333”→ “666” 这应该保持不变: “1212333”→ 不变的 “3331212”→ 不变的 “333asda”

使用下面的代码解析文本文档会匹配“333”的每个实例,但是我只希望更改下面的三个示例

(Get-Content input.json) | ForEach-Object {
    $_ -replace '333', '666'
} | Set-Content output.json
这应该改变:

  • “se333”→ “se666”
  • “SE333”→ “SE666”
  • “333”→ “666”
这应该保持不变:

  • “1212333”→ 不变的
  • “3331212”→ 不变的
  • “333asda”→ 不变的
  • “asd333”→ 不变的
PowerShell正则表达式解决方案是什么?

您可以使用

(?i)(?<=\b(?:se)?)333\b

“se333”
“asd333”
有什么不同?这里的规则是什么?我认为
(?会起作用(匹配
333
,前面有字母或字符串开头),后面有单词边界,但它也匹配
asd333
“se333”是一个ID,所以“se”是键的一部分,asd应该代表任何其他字母。问得好!这是否意味着
se
是一个永远不会改变的静态部分?然后尝试
(?i)(?是的,没错,
se
是静态的,看起来很有希望,我是否只需将代码片段中的
333
交换到
(?i)(?
$)-替换“(?i)(?)?
PS> $s = "se333 SE333 333 1212333 3331212 333asda asd333"
PS> $s -replace '(?i)(?<=\b(?:se)?)333\b', '666'
se666 SE666 666 1212333 3331212 333asda asd333