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