如何使用正则表达式提取键值对?

时间:2011-06-15 10:27:39

标签: regex

说实话,我正在努力处理我需要提取部分字符序列的正则表达式。该序列包含用/字符括起来的键对和值对。因此,该对可以是/KEY/VALUE/,也可以是/KEY/VAL/UE/。这对在序列中彼此相邻。

让我们看一下示例序列:

  

/ABCD/value1//ECFG/value2//HIJK/value3a/value3b/

我希望能够获得这样的键值对列表:

  

ABCD -> value1

     

ECFG -> value2

     

HIJK -> value3a/value3b

2 个答案:

答案 0 :(得分:5)

这应该有效:

/(.+?)/(.+?)/(?=/|$)

第一个paren将捕获密钥,第二个paren将捕获该值。 前瞻匹配第二个/,表示新的键/值对或最后一个键/值对的字符串结尾。

编辑:这里有一些python代码:

s = "/ABCD/value1//ECFG/value2//HIJK/value3a/value3b/"
re.findall('/(.+?)/(.+?)/(?=/|$)', s)
# [('ABCD', 'value1'), ('ECFG', 'value2'), ('HIJK', 'value3a/value3b')]

答案 1 :(得分:1)

试试这个:/(.*?)/(.*?)/

以下是与sed一起使用的方法:

sed -e 's,/(.*?)/(.*?)/,$1 --> $2\n,g' inputfile.txt

关键是非贪婪的匹配.*?(而不是贪婪的.*