在 Powershell 中格式化字符串,但仅第一次或特定出现替换令牌

Formatting string in Powershell but only first or specific occurrence of replacement token

我有一个正则表达式,我在脚本中使用了多次,其中一个词发生了变化,但表达式的其余部分保持不变。通常我通过创建一个正则表达式字符串来处理这个问题,其格式如下例所示:

# Simple regex looking for exact string match
$regexTemplate = '^{0}$'

# Later on...
$someString = 'hello'
$someString -match ( $regexTemplate -f 'hello' ) # ==> True

但是,我编写了一个更复杂的表达式,我需要在表达式模板中插入一个变量,并且...正则表达式语法和字符串格式化语法开始冲突:

$regexTemplate = '(?<=^\w{2}-){0}(?=-\d$)'

$awsRegion = 'us-east-1'
$subRegion = 'east'

$awsRegion -match ( $regexTemplate -f $subRegion ) # ==> Error

这会导致以下错误:

InvalidOperation: Error formatting a string: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

我知道问题出在哪里,它正在将我的一个表达式量词视为替换标记。与其选择字符串插值方法或自己替换 {0},有没有办法告诉 PowerShell/.NET 只替换 0 索引的令牌?还是有另一种方法可以使用格式字符串实现所需的输出?

如果字符串模板包含 { and/or } 个字符,您需要将这些字符加倍,以免它们干扰编号占位符。

尝试

$regexTemplate = '(?<=^\w{{2}}-){0}(?=-\d$)'