2011-06-15 222 views
5

說實話,我正在努力處理我需要提取字符序列部分的正則表達式。該序列包含由/字符組成的密鑰對和值對。所以這一對可以是/KEY/VALUE/,但也可以是/KEY/VAL/UE/。這些對在序列中彼此相鄰。如何使用正則表達式提取鍵值對?

讓我們看看示例順序:

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

我想什麼能夠做的是讓這樣的鍵值對的列表:

ABCD -> value1

ECFG -> value2

HIJK -> value3a/value3b

+0

你想在運行該用什麼語言? – Bohemian 2011-06-15 10:32:38

+0

我正在使用Java,'java.util.regex。*'更具體。 – 2011-06-15 10:35:28

回答

5

這應該工作:

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

第一個paren將捕獲關鍵值,第二個值。 Lookahead匹配第二個/,表示新的鍵/值對或最後一個鍵/值對的字符串結尾。

編輯:這裏是一些Python代碼:

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

完美,它像一個魅力工作。感謝您的快速幫助! – 2011-06-15 10:44:55

1

試試這個:/(.*?)/(.*?)/

這裏是你將如何與使用它的sed:

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

的關鍵是(而不是貪婪.*)非貪婪匹配.*?