#powershell
Вопрос:
У меня есть веревочка:
<UserInputs><UserInput Question="Groupname" Answer="amp;<Values Count=amp;quot;1amp;quot;amp;>amp;<Value DisplayName=amp;quot;AllHummanresourcesamp;quot; Id=amp;quot;af05c5d3-2312-c897-8439-08979d4d0a49amp;quot; /amp;>amp;</Valuesamp;>" Type="System.SupportingItem.PortalControl.InstancePicker" /><UserInput Question="Ausgabe" Answer="Namen" Type="richtext" /></UserInputs>
Я хочу обрезать строку, чтобы получить в результате «AllHummanresources«. Так что мне нужно слово между DisplayName=amp;quot;
и amp;quot;
.
Как я могу достичь этой цели? Я не нашел подходящего примера в сети 🙁
приветствие
Комментарии:
1. Эта «строка», похоже, взята из структуры XML-файла… В этом случае существуют более эффективные методы доступа к нужной вам ценности.
2. И странно, что
Answer=
еще одна экранированная xml-строка<Values Count="1"><Value DisplayName="AllHummanresources" Id="af05c5d3-2312-c897-8439-08979d4d0a49" /></Values>
Ответ №1:
Вы можете использовать Select-String
командлет вместе с регулярным выражением.
$result = $your_string | Select-String -Pattern "DisplayName=amp;quot;(.*?)amp;quot;"
Если совпадение пройдет успешно, вы сможете получить доступ к группе по
Write-Host $result.Matches.Groups[1].Value
Комментарии:
1. хорошо, спасибо. как мне перевести мой «исходный код» в строку? Есть некоторые кавычки, я это то, что вызывает проблемы, если я просто делаю $your_string = «………….»
2. @rolfderwolf Заключите свою строку в одинарную кавычку…
3. да, и в этом тоже есть проблема. Я получаю $имя Успех : Истинное имя : 1 Захватывает : {1} Индекс : 94 Длина : 6 Значение : Все человеческие ресурсы, а не только все человеческие ресурсы
4. @rolfderwolf Так и должно быть
$result.Matches.Groups[1].Value
. Я отредактировал свой ответ.5. Или
$name.Value
Ответ №2:
Вы могли бы использовать -replace
оператор, чтобы опустить все, кроме этой строки.
$string -replace '. (?:DisplayName=amp;quot;)(.*?)amp;quot. ', '$1'
Конечно, это так же хорошо, как согласованность вашей входной строки.