【问题标题】:How to parse a string to key value pair using regex?如何使用正则表达式将字符串解析为键值对?
【发布时间】:2018-06-13 14:43:14
【问题描述】:

使用正则表达式将字符串解析为键值对的最佳方法是什么?

示例输入:

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

预期输出:

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

我们已经尝试过以下正则表达式及其工作方式。

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

但是我们想要一个通用的正则表达式,它将样本输入解析为键值对的预期输出?

任何想法或解决方案都会有所帮助。

【问题讨论】:

  • 是一个正则表达式吗?
  • 是的,实际上我们需要它在 fluentd 中解析并作为 Json 发送到弹性搜索。
  • 啊好吧,在评论/编辑之前我对Hash[str.scan(/(\S+)="(\S+)"/)] 很满意,但我猜这不是故意的 :)
  • 感谢@SRack 的回复。如果我们与 ruby​​ 脚本集成。我们将使用您的 sn-p 代码。

标签: json regex parsing fluentd


【解决方案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"

【讨论】:

  • 亲爱的 mudasobwa, 感谢您的及时回复。作为一个红宝石代码,这很好用。将尝试我是否能够将 ruby​​ 代码集成到流利的解析器中。正则表达式会很有帮助。问候,拉吉
  • @rajkumar21 如果红宝石答案不一定可以接受,为什么要标记问题ruby
  • @engineersmnky 实际上 fluentd 是一个 ruby​​ 应用程序。现在我有办法与 Regex 集成,所以我在等待 regex。与此同时,我们正试图找到一种集成 ruby​​ 脚本的方法。如果成功,我会将其标记为正确答案。
  • 正则表达式:/((\w+)="([^"]+)"\s+)+/.
【解决方案2】:

可以通过将字符串拆分并存储在哈希中来完成,而不是使用正则表达式,如下所示:

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\""}

【讨论】:

  • 感谢您的回答。如果我们只看问题陈述,我们可以通过多种方式解决它,但我们需要将它与 fluentd 解析器集成。如果我们能够使用 ruby​​ 进行集成,那么我将尝试此选项并将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2015-07-31
相关资源
最近更新 更多