Когда LotPings указывает в комментарии, проблема в том, что [^\\]
соответствует пробелу перед {0}
, поэтому заменяемое полное совпадение равно {0}
, что объясняет, почему результатis SelectSuccess
.
Решение состоит в том, чтобы использовать отрицательное косвенное утверждение :
Select {0}' -replace '(?<!\\)\{0\}', 'Success'
(?<!\\)
гарантирует, что подвыражение \{0\}
не является (!
) предшествует ((?<...
) a \
char.(\\
) без учета этого символа.в матче .
Как указывает LotPings, использование вами группы захвата ((...)
) в регулярном выражении не имеет никакого эффекта, поскольку вы не ссылаетесь на нее как на обратную ссылку внутрирегулярное выражение (\1
) ни в операнде замены ($1
).
Обратите внимание, что -replace
всегда заменяет то, что регулярное выражение захватывает в целом , независимо от групп захвата.Чтобы сопоставить части ввода без включения их в захваченный результат, используйте проверочные утверждения , как показано выше.