2016-09-27 36 views
2

使用str.split"print 'Hello, world!' times 3"返回列表["print", "'Hello,", "world!'", "times", "3"]。但是,我想要結果["print", "'Hello, world!'", "times", "3"]。我怎樣才能做到這一點?包含字符串文字的令牌線

+2

*「這很明顯,這不是理想的結果」 - 對你來說,也許。對我來說看起來很好,假設你所做的全部是空間分割。此外,這是一個集合,而不是一個列表,所以訂單不能保證。 – jonrsharpe

+0

正則表達式是你的鑰匙 –

+1

@NeilGatenby對不起,意思是'foo.split()'...新來的Python,仍然記憶功能:) –

回答

1

這個正則表達式會捕獲報價,如果你想要它們。

import re 

s = "print 'hello, world!' 3 times" 
re.findall(r'(\w+|\'.+\')',s) 
+0

不需要修改這一個;它工作完美。非常感謝你 :) –

3

如果你要排除的報價的話了分裂的,你可以使用shlex.split

import shlex 

s = "print 'Hello, world!' times 3" 
print(shlex.split(s)) 
# ['print', 'Hello, world!', 'times', '3'] 
+2

我會建議str.split(「'」),它保留了單引號,並且還有更多的工作要做......但這看起來更好看 –

+0

哇,非常有用的功能!這可以很容易地修改,以處理重新添加引號(如果s包含''然後s ='''+ s +'「'),這樣就完美地回答了我的問題。謝謝! –

0

.split()功能分割基於定界符的str。默認分隔符是blank space。它不關心字符串中的'。如果您想將'中的單詞作爲單個單詞處理。您應該使用shlex庫,或者您可以編寫regex表達式。當然,split()不是你正在尋找的。