2013-09-29 37 views
0

我想分割下面提到的字符串:如何忽略報價,而拆分字符串蟒蛇

lin=' <abc<hd <> "abc\"d\" ef" ' 

[<abc<hd <>, "abc\"d\" ef"] 

但我的問題是,當我使用分裂的re.findall(r'"(.*?)"', lin, 0)字符串。我得到

['abc', 'ef'] 

有人可以請指導我如何在Python中分割字符串?

回答

4

這是一個使用正則表達式的解決方案。

import re 
line = ' <abc<hd <> "abc\"d\" ef" ' 

match = list(re.findall(r'(<[^>]+>)\s+("(?:\"|[^"])+")', line)[0]) 

print(match) 
#['<abc<hd <>', '"abc"d" ef"'] 

另一種方法。

print(re.split(r'\s+(?=")', line.strip())) #split on white space only if followed by a quote. 
#['<abc<hd <>', '"abc"d" ef"']  
0
>>> lin=' <abc<hd <> "abc\"d\" ef" ' 
>>> lin.split('"', 1) 
[' <abc<hd <> ', 'abc"d" ef" '] 
+0

什麼呢分裂表明 –

+1

內參數1閱讀Python文檔 –

+0

這不是OP想要的東西。檢查你的答案提供的額外空白 – TerryA

2

首先,你必須在開始和你的字符串的結尾一些額外的空格,這樣做lin .strip()將刪除。

然後可以使用str.split()在第一"分裂:

>>> lin.strip().split(' "', 1) 
['<abc<hd <>', 'abc"d" ef"'] 

我們作爲第二個參數使用1告訴蟒蛇只有一次拆分它,所以不是每隔"分裂。

1

另一個正則表達式的解決方案

import re 
lin=' <abc<hd <> "abc\"d\" ef" ' 
matching = re.match("\s+(.*?)\s+(\"(.*)\")", lin) 
print [matching.group(1), matching.group(2)] 

輸出

['<abc<hd <>', '"abc"d" ef"']