繁体   English   中英

在 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 的令牌? 还是有另一种方法可以使用格式字符串实现所需的输出?

如果字符串模板包含{和/或}字符,您需要将这些字符加倍,以免它们干扰编号的占位符。

尝试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM