【问题标题】:Powershell - How to replace a number with a variable in a string?Powershell - 如何用字符串中的变量替换数字?
【发布时间】:2021-10-31 09:55:14
【问题描述】:

尝试使用替换运算符替换字符串中的数字(20 和变量 $cntr=120)。但是在输出中被 $cntr 卡住了。我在哪里做错了?请有更好的解决方案。

输入字符串-
myurl.com/search?project=ABC&startAt=20&maxResults=100&expand=log

所需的输出字符串-
myurl.com/search?project=ABC&startAt=120&maxResults=100&expand=log

实际输出字符串-
myurl.com/search?project=ABC&startAt=$cntr&maxResults=100&expand=log

$str='myurl.com/search?project=ABC&startAt=20&maxResults=100&expand=log'
$cntr=120
$str = $str -replace '^(.+&startAt=)(\d+)(&.+)$', '$1$cntr$3'
$str

【问题讨论】:

  • 使用像 "$1$cntr$3" 这样的双引号不起作用。我得到 120。所以,只有 $cntr 正在评估,而不是 $1 和 $3。
  • @Ctznkane525 建议的解决方案可行,但想知道是否有任何替代解决方案可用于此类替换任务。

标签: regex string powershell replace


【解决方案1】:

你需要

  • 使用双引号可以使用字符串插值
  • 使用明确的反向引用语法,${n},其中 n 是组 ID。

在这种情况下,您可以使用

PS C:\Users\admin> $str='myurl.com/search?project=ABC&startAt=20&maxResults=100&expand=log'
PS C:\Users\admin> $cntr=120
PS C:\Users\admin> $str = $str -replace '^(.+&startAt=)(\d+)(&.+)$', "`${1}$cntr`$3"
PS C:\Users\admin> $str
myurl.com/search?project=ABC&startAt=120&maxResults=100&expand=log

见.NET regex "Substituting a Numbered Group" documentation:

$ 后面的所有数字都被解释为属于 number 组。如果这不是您的意图,您可以替换为命名组。例如,您可以使用替换字符串${1}1 而不是$11 将替换字符串定义为第一个捕获组的值以及数字“1”。

【讨论】:

  • 上述解决方案完美!谢谢@Wiktor Stribizew。
【解决方案2】:

这里有几件事:

如果您只添加“12”,您最终会得到 $112$3,这不是您想要的。我所做的是在前面附加一个斜杠,然后在后端将其删除,因此替换变为 $1\12$3。

$str='myurl.com/search?project=ABC&startAt=20&maxResults=100&expand=log'
$cntr=12
$str = ($str -replace '^(.+&startAt=)(\d+)(&.+)$', ('$1\' + $cntr.ToString() +'$3')).Replace("\", "")
$str

看看是否有另一种方法可以在替换部分添加文字“12”和额外的字符,但这确实有效。

这是另一种方法,在 $1 和 $3 之间有一个文字字符串,然后在末尾替换它。

$str='myurl.com/search?project=ABC&startAt=20&maxResults=100&expand=log'
$cntr=12
$str = ($str -replace '^(.+&startAt=)(\d+)(&.+)$', ('$1REPLACECOUNTER$3')).Replace("REPLACECOUNTER", "$cntr")
$str

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2017-09-20
    • 2014-09-20
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多