Строка форматирования в Powershell, но только первое или конкретное появление токена замены

У меня есть регулярное выражение, которое я использую несколько раз в скрипте, где меняется одно слово, но остальная часть выражения остается прежней. Обычно я справляюсь с этим, просто создавая строку регулярного выражения в формате, подобном следующему примеру:

# 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? Или есть другой способ добиться желаемого результата с помощью строк формата?


person Bender the Greatest    schedule 20.10.2020    source источник


Ответы (1)


Если шаблон строки содержит символы { и/или }, их необходимо удвоить, чтобы они не мешали пронумерованным заполнителям.

Пытаться

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