2016-10-17 3 views
2

У меня возникли проблемы с регулярным выражением, главным образом потому, что я думаю, что информация, которую я могу найти, специально не для powershell, и все образцы, которые я пробовал либо ошибку, либо не работают как предполагалось. Я пытаюсь заменить первое вхождение слова в строку другим словом, но не заменять другие вхождения этого слова. для примера взять строку:Замена только первого вхождения слова в строку

My name is Bob, her name is Sara.

Я хотел бы заменить первое вхождение name с baby поэтому результирующая строка будет

My baby is Bob, her name is Sara.

Я работаю в https://regex101.com/ для попробуйте построить и посмотреть, что выбрано, когда я иду, но, как я уже сказал, ни один из них не обладает сильным вкусом регулярного выражения. В этом я могу просто отключить флаг global и, похоже, выбрать первое вхождение, но не в powershell. Так что я действительно в недоумении, где начать все действительно в данный момент выбирает все вхождения слова name с:

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

ответ

2

Вы могли бы захватить все bevore и позади, и заменить его:

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

Wow, что работал большой. Я думаю, что я был близок к тому, что я пробовал некоторые примеры, например, с '$ 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' Just says заменит первый, который вы найдете? Вместо этого заменил бы «2»? Если вы сказали «3» и имеете только 2 слова «имя», он ошибся или заменит только первые 2? – themackyo

+0

Да, его количество замен. Если вы передадите число больше, чем фактическую частоту слова, оно просто заменит их все. –

Смежные вопросы