Как разобрать строку в пару ключ-значение с помощью регулярных выражений? - PullRequest
0 голосов
/ 13 июня 2018

Каков наилучший способ разбить строку на пару значений ключей с помощью регулярных выражений?

Пример ввода:

application="fre" category="MessagingEvent" messagingEventType="MessageReceived"

Ожидаемый результат:

application         "fre"
Category            "MessagingEvent"
messagingEventType  "MessageReceived"

Мы уже попробовали следующее регулярное выражение и его работу.

application=(?<application>(...)*) *category=(?<Category>\S*) *messagingEventType=(?<messagingEventType>\S*)

Но мы хотим универсальное регулярное выражение, которое будет анализировать входные данные выборки вожидаемый результат в виде пары ключ-значение?

Любая идея или решение будут полезны.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вместо использования регулярных выражений это можно сделать, разделив и сохранив строку в хеш-коде, как показано ниже:

input = 'application="fre" category="MessagingEvent" messagingEventType="MessageReceived"'
res = {}
input.split.each { |str| a,b = str.split('='); res[a] = b}
puts res
==> {"application"=>"\"fre\"", "category"=>"\"MessagingEvent\"", "messagingEventType"=>"\"MessageReceived\""}
0 голосов
/ 13 июня 2018
input = 'application="fre" category="MessagingEvent" messagingEventType="MessageReceived"'

puts input.
       scan(/(\w+)="([^"]+)"/). # scan for KV-pairs
       map{ |k, v| %Q|#{k.ljust(30,' ')}"#{v}"| }. # adjust as you requested 
       join($/) # join with platform-dependent line delimiters

#⇒ application                   "fre"
#  category                      "MessagingEvent"
#  messagingEventType            "MessageReceived"
...