2016-10-17 110 views
2

我遇到了一些正則表達式的問題,主要是因爲我認爲我能找到的信息並不是專門針對PowerShell的,而且我嘗試過的所有示例都有錯誤或不起作用如預期。我試圖用一個單詞替換字符串中第一個單詞的出現,但不能替換該單詞的任何其他出現。爲例採取串:只替換字符串中第一個字的出現

My name is Bob, her name is Sara.

我想與baby取代的name第一次出現這樣的結果字符串將

My baby is Bob, her name is Sara.

我在https://regex101.com/一直在努力嘗試構建並看看我選擇的是什麼,但正如我所說的,這些都沒有一個正則表達式的PowerShell風格。在這我可以關閉global標誌,它似乎選擇第一次出現,但不是在PowerShell中。所以,我在哪裏開始全部損失是真的真的有在這一點上是選擇字name所有出現的:

$test = "My name is Bob, her name is Sara." 
$test -replace 'name', 'baby' 

回答

2

你可以捕捉一切be​​vore和後面,替換:

'My name is Bob, her name is Sara.' -replace '(.*?)name(.*)', '$1baby$2' 
+0

哇,這真是棒極了。我認爲我接近,我嘗試了一些像'$ 1'和'$ 2'那樣的例子,但是無法正常工作。謝謝您的幫助。我沒有完全理解這些例子的工作原理,但現在這很有意義。 – themackyo

5

一種方式來代替ñ時間:

$test = "My name is Bob, her name is Sara." 
[regex]$pattern = "name" 
$pattern.replace($test, "baby", 1) 

> My baby is Bob, her name is Sara 
+0

所以'1'只是說取代你發現的第一個?一個'2'會代替兩個呢?如果你說'3'只有2個單詞的名字,它會錯誤還是隻替換前兩個? – themackyo

+0

是的,它的替代品的數量。如果您傳遞的數字大於該單詞的實際頻率,則它將全部替換它們。 –

相關問題