2013-11-26 60 views
-2

我需要拆分由空格分隔的不同字符串,但我想忽略嵌套雙引號或雙引號組合中的空格。這裏有一個例子:如何按空格拆分,但在多個雙引號中忽略它?

c "a " bbh "." d1 

輸出應該是這樣的:

c 
"a " bbh "." 
d1 

或者雙引號像這樣的其他組合:

c "a "bbh"" d1 

輸出應該是這樣的:

c 
"a "bbh"" 
d1 

是任何方式來排除分裂的雙引號的任何組合?

*編輯*

一個例子:

c "a " bbh "." d1 kj "mn" 

輸出應該是這樣的:

c 
"a " bbh "." 
d1 
kj 
"mn" 

編輯

謝謝您幫助傢伙。其實我根據我的數據問了這個問題。什麼讓我的問題不明確是數據的錯誤格式!

+0

當你說「雙引號的任意組合」時,你是否包含奇數的雙引號?你想排除(從拆分)字符串中第一個和最後一個雙引號之間的所有文本嗎? –

+3

你怎麼知道'「a」bbh「」'是一個引用的字符串,還是字符串'「a」','bbh'(不含引號)和'「」'? – Blckknght

+0

@PeterAlfvin實際上不是,雙引號的數目是偶數,但我們不能在字符串中的第一個和最後一個雙引號之間說出所有文本,因爲字符串可能是這樣的:c「a」bbh「。」 d1 kj「nh」 – user3003428

回答

0

你可以嘗試後,正則表達式

>>> strs = re.split(r'(".+")+', 'c "a " bbh "." d1 ') 

>>> strs = strs[0].split(" ") + strs[1] + strs[2].split(" ") 

>>> strs = filter(None, strs) 

它一對雙引號,雙引號之間的一切之前分割字符串成的一切,一切。然後它根據雙引號之前和之後的空格完成分區。

+0

謝謝,但它包含分隔符(空格)的標記,也沒有用到這樣的例子:'c「a」bbh「。」 d1 kj「mn」' – user3003428

+1

這是因爲該示例不明確。刪除多餘空間也很容易,但首先重申您的問題,使其有意義。 – bcorso

3

您試圖使用雙引號的方式,人們通常會使用括號。你的最後一個例子可以改寫爲

c (a (bbh).) d1 kj (mn) 

事實上,它需要重寫那種方式才能解決。有沒有辦法語義知道,你希望你的例子轉換爲字符串上方或

c (a (bbh (.) d1 kj)mn) 

c (a) bbh (.) d1 kj (mn) 

和字符串中的更多的報價,將更多的方式可以把它理解。事實上,最後兩個是更明顯的解釋,因爲後者是引語通常在編程語言中的工作方式,而前者可以被認爲是貪婪的正則表達式(比如bcorso的解決方案)。所以你想要的是不可能的,但是如果你只是稍微改變了它,那麼通過遞歸解決方案(但不是正則表達式,因爲你需要檢查平衡的圓括號)是可能的。

相關問題