2017-07-11 44 views
5

我有以下文字蟒蛇用引號和空格分割文本

text = 'This is "a simple" test' 

,我需要它在兩個方面分開,先用雙引號,然後用空格,導致:

res = ['This', 'is', '"a simple"', 'test'] 

但與str.split()我只能使用引號或空格作爲分隔符。有多個分隔符的內置函數嗎?

回答

8

您可以使用shlex.split,方便解析帶引號的字符串:

>>> import shlex 
>>> text = 'This is "a simple" test' 
>>> shlex.split(text, posix=False) 
['This', 'is', '"a simple"', 'test'] 

非POSIX模式這樣做可以防止去除分割結果內報價。

>>> shlex.split(text) 
['This', 'is', 'a simple', 'test'] 

如果你有這種類型的文本的多條線路,或者你從流中讀取,你可以拆分有效(不輸出引號)使用csv.readerposix被默認設置爲True

import io 
import csv 

s = io.StringIO(text.decode('utf8')) # in-memory streaming 
f = csv.reader(s, delimiter=' ', quotechar='"') 
print list(f) 
# [['This', 'is', 'a simple', 'test']] 

如果在Python 3上,您不需要將字符串解碼爲unicode,因爲所有字符串都是unicode。

1

對於你的情況shlex.split將會很好。

至於答案multiple delimiters?

import re 

re.split('\"|\s', string) 
2

如果我理解你的權利,那麼你可以使用正則表達式

>>> import re 
>>> text = 'This is "a simple" test' 

>>> re.split('\s|\"', text)

[ '這個', '是', '', 'a','簡單','','測試']

0

使用csv閱讀器。

import csv 
text = 'This is "a simple" test' 
list_text=[] 
list_text.append(text) 
for row in csv.reader(list_text, delimiter=" "): 
    print(row) 

你還可以看到更多關於here

0

嘗試重新使用:

import re 
text = 'This is "a simple" test' 
print(re.split('\"|\s', text)) 

結果:

['This', 'is', '', 'a', 'simple', '', 'test'] 
0

你可以看看shlex庫。

from shlex import split 
a = 'This is "a simple" text' 
split(a) 

[ '這個', '是', '簡單', '文字']

我不認爲正則表達式是你在找什麼