使用正则表达式将字符串解析为键值对的最佳方法是什么?
示例输入:
application="fre" category="MessagingEvent" messagingEventType="MessageReceived"
预期输出:
application "fre"
Category "MessagingEvent"
messagingEventType "MessageReceived"
我们已经尝试了以下正则表达式及其工作原理。
application=(?<application>(...)*) *category=(?<Category>\S*) *messagingEventType=(?<messagingEventType>\S*)
但我们想要一个通用的正则表达式,它会将样本输入解析为预期的输出作为键值对吗?
任何想法或解决方案都会有所帮助。
答案 0 :(得分:1)
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"
答案 1 :(得分:0)
不是使用正则表达式,而是可以通过将字符串拆分并存储在哈希中来完成,如下所示:
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\""}