[英]Powershell - How to replace a number with a variable in a string?
尝试使用替换运算符替换字符串中的数字(20 和变量 $cntr=120)。 但是在 output 中被 $cntr 困住了。我哪里做错了? 请有更好的解决方案。
输入字符串
myurl.com/search?project=ABC&startAt=**20**&maxResults=100&expand=log
所需的 Output 字符串
myurl.com/search?project=ABC&startAt=**120**&maxResults=100&expand=log
实际 Output 字符串
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
你需要
${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
$
后面的所有数字都被解释为属于数字组。 如果这不是您的意图,您可以用命名组代替。 例如,您可以使用替换字符串${1}1
而不是$11
来将替换字符串定义为第一个捕获组的值以及数字“1”。
这里有几件事:
如果您只添加“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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.