Можно ли заменить Regex неживым?

"-dhello;-egoodbye;-lcul8r" -replace "-d.*;","-dbonjour;"

дает:

-dbonjour;-lcul8r

Можно ли избавиться от goodbye?

Ответ 1

Вы должны сделать совпадение ленивым, используя ?.

Использование:

"-dhello;-egoodbye;-lcul8r" -replace "-d.*?;","-dbonjour;"

Ответ 2

Всегда быть явным. .* соответствует всем возможностям (включая точку с запятой и все, что следует), но вы хотите только совпадение до следующей точки с запятой, поэтому просто сообщите движку регулярных выражений, что:

"-dhello;-egoodbye;-lcul8r" -replace "-d[^;]*;","-dbonjour;"

[^;] соответствует любому символу, кроме точки с запятой.