[英]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 的令牌? 还是有另一种方法可以使用格式字符串实现所需的输出?
如果字符串模板包含{
和/或}
字符,您需要将这些字符加倍,以免它们干扰编号的占位符。
尝试
$regexTemplate = '(?<=^\w{{2}}-){0}(?=-\d$)'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.