user957479
user957479

Reputation: 501

Powershell variable in replacement string with named groups

The following Powershell replace operation with named groups s1 and s2 in regex (just for illustration, not a correct syntax) works fine :

$s -Replace "(?<s1>....)(?<s2>...)" '${s2}xxx${s1}'

My question is : how to replace with a variable $x instead of the literal xxx, that is, something like :

$s -Replace "(?<s1>....)(?<s2>...) '${s2}$x${s1}'

That doesn't work as Powershell doesn't replace variable in single quoted string but the named group resolution doesn't work anymore if replacement string is put in double quotes like this "${s2}$x${s1}".

Upvotes: 6

Views: 1440

Answers (1)

Vincent De Smet
Vincent De Smet

Reputation: 4979

@PetSerAl comment is correct, here is code to test it:

$sep = ","
"AAA BBB" -Replace '(?<A>\w+)\s+(?<B>\w+)',"`${A}$sep`${B}"

Output: AAA,BBB

Explanation:

Powershell will evaluate the double quoted string, escaping the $ sign with a back tick will ensure these are not evaluated and a valid string is provided for the -Replace operator.

or via Get-Help about_escape & Get-Help about_comparison_operators

Upvotes: 4

Related Questions