Извлечение значения ключа из строки

#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. Всем спасибо за быстрый ответ. Они работают. Действительно ценится.