#regex #powershell
#регулярное выражение #powershell
Вопрос:
У меня есть следующий код:
$myString = "Name=Tony;Fee=10;Account=Premium"
$splitString = "$($myString)".Split(";")
$name = $splitString -match "Name=(?<content>.*)"
$acct = $splitString -match "Account=(?<content>.*)"
$name
$acct
Результат:
Name=Tony
Account=Premium
Как я могу заставить его возвращать только значение? Пример:
Tony
Premium
Заранее спасибо
Ответ №1:
Combine -split
, оператор разбиения строки, с switch
оператором и его -Regex
переключателем:
$name, $acct =
switch -Regex ("Name=Tony;Fee=10;Account=Premium" -split ';') {
'^(?:Name|Account)=(?<content>.*)' { $Matches['content'] }
}
Ответ №2:
Вот другой подход, использующий -Split
и использующий преимущества формата текста с использованием ConvertFrom-StringData
$name, $acct = "Name=Tony;Fee=10;Account=Premium" -split ';' |
ConvertFrom-StringData | ForEach-Object {$_.name,$_.Account}
Ответ №3:
Я бы использовал -split
здесь, чтобы построить хеш-таблицу пар ключ-значение:
$myString = "Name=Tony;Fee=10;Account=Premium"
# Create hashtable
$ht = @{}
# Spit string by ';' and loop over each item
foreach ($item in $myString -split ';') {
# Split item by '=' to get key value pair
$pair = $item -split '='
# Set key value pair into hashtable
$ht[$pair[0]] = $pair[1]
}
# Output values you want
$ht.Name
$ht.Account
# Tony
# Premium
Что также полезно, если вам нужно искать другие значения.
Комментарии:
1. Всем спасибо за быстрый ответ. Они работают. Действительно ценится.