Соответствие длины номера с префиксом - PullRequest
0 голосов
/ 11 июня 2019

У меня есть строка в коде <add key="Port" value="51130" /> Я хочу заменить значение на Порты, которые я передаю. Все Начните с "51". Я хочу иметь возможность заменить 51 * необходимый новым номером порта. Я не могу понять это.

Пробовал что-то вроде:

$content = " <add key="Port" value="51130" />

$port = "51128"

(Get-Content $content).Replace("51*","$($port)")

Но я знаю, что это буквально, а НЕ подстановочный знак.

Я тоже пробовал:

(Get-Content $content).Replace('51\d+',"$($port)")

Но и там не повезло.

1 Ответ

1 голос
/ 11 июня 2019

Чтобы использовать оператор замены регулярных выражений, вы можете сделать следующее, если $content содержит целевую строку.

$content -Replace "51\d+",$port 

Если $content - это путь, вы можете запустить Get-Content и затем применить-Replace.

(Get-Content $content) -Replace "51\d+",$port

LotPings предоставил синтаксис для использования положительного взгляда за утверждением, что более безопасно для случаев, когда вы не хотите заменять все числа в строке/ файл, начинающийся с 51:

$content -Replace '(?<=add key="Port" value=")51\d+',$port

Проблема с .Replace() заключается в том, что он не поддерживает регулярные выражения.Это метод из строкового класса, который заменяет буквальную строку.

Кроме того, кажется, что это является частью определения XML.Вам может быть лучше создать XML-объект и соответствующим образом обновить атрибуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...