#powershell
Вопрос:
Я пытаюсь заменить все в строке после того, как найдено определенное выражение: в данном случае», =dc».
Я вроде как новичок в PowerShell, поэтому был бы признателен за любую помощь. Мой код заменяет только «,=dc», но не то, что за этим стоит
$array = @()
$array = "vu=doc,vu=noc,dc=zet,dc=zez"
$array = "vu=doc,vu=nud,dc=gut,dc=zrt"
$array = "vu=doc,vu=nud,vu=dit,dc=gut,dc=zrt,dc=opt"
foreach ($value in $array){
$arraytype -replace "(?<=(,=dc)).*"
}
Я хочу вернуть только часть «vu=doc,vu=noc». Все, что после первого», =dc», должно быть удалено.
Ответ №1:
Проще использовать индексированный цикл, если вы хотите, чтобы значения в массиве обновлялись. Кроме того, вы можете определить массив, просто поставив запятую между элементами. Избегайте объединения =
, так как это означает, что каждый раз весь массив необходимо воссоздавать в памяти, что отнимает много времени и памяти.
Попробуй
$array = "vu=doc,vu=noc,dc=zet,dc=zez",
"vu=doc,vu=nud,dc=gut,dc=zrt",
"vu=doc,vu=nud,vu=dit,dc=gut,dc=zrt,dc=opt"
for ($i = 0; $i -lt $array.Count; $i ) {
$array[$i] = ($array[$i] -replace 'dc=[^,] ,?').TrimEnd(",")
}
$array
Результат:
vu=doc,vu=noc
vu=doc,vu=nud
vu=doc,vu=nud,vu=dit
Сведения о регулярном выражении:
dc= Match the character string “dc=” literally (case insensitive)
[^,] Match any character that is NOT a “,”
Between one and unlimited times, as many times as possible, giving back as needed (greedy)
, Match the character “,” literally
? Between zero and one times, as many times as possible, giving back as needed (greedy)
Ответ №2:
Вы можете использовать IndexOf
метод, чтобы найти положение строки, и использовать Substring
метод, чтобы разрезать строку до этой позиции.
$array = @()
$array = "vu=doc,vu=noc,dc=zet,dc=zez"
$array = "vu=doc,vu=nud,dc=gut,dc=zrt"
$array = "vu=doc,vu=nud,vu=dit,dc=gut,dc=zrt,dc=opt"
foreach ($value in $array){
$index = $value.IndexOf(",dc=")
if($index -eq -1) {
Write-Output $value
} else {
Write-Output $value.Substring(0, $index)
}
}
Примечание: Я думаю, что у вас опечатка в первой строке( $array = @()
)