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