首页 > 解决方案 > 正则表达式:从字符串中提取键/值

问题描述

我有数百行具有以下格式

00008#A=1#B=3334#C=23/03A#D=BA FRCT TL4 3/4-5/6 US#AVC=DD 2

键以 开头#,上面的行是:

A=1
B=3334
C=23/03A
D=BA FRCT TL4 3/4-5/6 US
AVC=DD 2

该行有许多不同/更多的键和值。

目标是提取键和值。

使用 ruby​​,没有正则表达式,我可以这样做:

line.split("#")[1..-1].inject({}) do |hash, kv|
  k, v = kv.split('=')
  hash[k] = v
  hash
end

哪个输出:

{"A"=>"1", "B"=>"3334", "C"=>"23/03A", "D"=>"BA FRCT TL4 3/4-5/6 US", "AVC"=>"DD 2"}

但我想知道是否可以在正则表达式中做同样的事情,因为一行可以有几十个具有不同值长度的键/值。

我的出发点是:([AZ])\w+

标签: regex

解决方案


以下正则表达式将匹配一个#key=value

#([^=]+)=([^#]*)

使用返回所有匹配项的函数。每个匹配中的捕获组将分别是键和值。


推荐阅读