说实话,我正在努力处理我需要提取部分字符序列的正则表达式。该序列包含用/
字符括起来的键对和值对。因此,该对可以是/KEY/VALUE/
,也可以是/KEY/VAL/UE/
。这对在序列中彼此相邻。
让我们看一下示例序列:
/ABCD/value1//ECFG/value2//HIJK/value3a/value3b/
我希望能够获得这样的键值对列表:
ABCD -> value1
ECFG -> value2
HIJK -> value3a/value3b
答案 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
关键是非贪婪的匹配.*?
(而不是贪婪的.*
)