2016-06-07 1 views

ответ

3

Я хотел бы использовать позитивный назад ', чтобы обеспечить вам найти правильный знак вопроса. Кроме того, вы должны использовать двойные кавычки на вашей замены, так как вы хотите заменить переменную:

(get-content C:\word.txt -raw) -replace '(?<=EquipmentInfo\[")\?', "$obj" | Set-Content C:\word.txt 

Regex используется:

(?<=EquipmentInfo\[")\? 

Regular expression visualization

+0

Спасибо, это работа! – Malmier

+0

++ для твердого решения: также стоит упомянуть, что простая ссылка переменной вообще не требует кавычек. – mklement0

2

Этот ответ объясняет исходная задача.
jisaak's helpful answer содержит комплексное решение.

Оператор -replace принимает регулярное выражение в качестве первого операнда на RHS, в котором ? является так называемая Метасимвол со специальным значением.

Таким образом, использовать буквального?, вы должны избежать его, используя \:

(get-content C:\word.txt) -replace '\?', $obj 

Примечание: Не используйте '...' вокруг $obj, если вы не хотите буквального строки $obj; как правило, для ссылки переменных внутри строк вы должны использовать "...", но здесь это не обязательно.

Простой пример с буквальным:

'Right?' -replace '\?', '!' # -> 'Right!' 
+0

Я это тоже попробовать, но не делают PowerShell согласен + (get-content C: \ word.txt) -replace '?', '$ obj' ... + ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Категория: Инвали dOperation: (?: String) [], RuntimeException + FullyQualifiedErrorId: InvalidRegularExpression – Malmier

+0

Тогда проблема должна лежать в другом месте - см. мой пример. Пожалуйста, добавьте [MCVE (минимальный, полный и проверенный пример)] (http://stackoverflow.com/help/mcve) _ прямо на ваш вопрос_. – mklement0

+0

Ваше решение действительно также, таким образом, поддерживается. Просто захотелось добавить более регулярное выражение для замены. Не знаю, почему он не может запустить его ... –