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

时间:2017-08-31 10:09:32

标签: 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”→未更改
  • “asd333”→未更改

PowerShell正则表达式的解决方案是什么?

1 个答案:

答案 0 :(得分:4)

您可以使用

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

请参阅regex demo

<强>详情

  • (?i) - 不区分大小写的修饰符
  • (?<=\b(?:se)?) - 333之前必须有单词边界和anoptional substrin se
  • 333 - 文字子字符串
  • \b - 一个尾随字边界。

Powershell测试:

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