簡體   English   中英

Powershell - 如何用字符串中的變量替換數字?

[英]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

請參閱.NET 正則表達式“替換編號組”文檔

$后面的所有數字都被解釋為屬於數字組。 如果這不是您的意圖,您可以用命名組代替。 例如,您可以使用替換字符串${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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM