我有以下文字蟒蛇用引號和空格分割文本
text = 'This is "a simple" test'
,我需要它在兩個方面分開,先用雙引號,然後用空格,導致:
res = ['This', 'is', '"a simple"', 'test']
但與str.split()
我只能使用引號或空格作爲分隔符。有多個分隔符的內置函數嗎?
我有以下文字蟒蛇用引號和空格分割文本
text = 'This is "a simple" test'
,我需要它在兩個方面分開,先用雙引號,然後用空格,導致:
res = ['This', 'is', '"a simple"', 'test']
但與str.split()
我只能使用引號或空格作爲分隔符。有多個分隔符的內置函數嗎?
您可以使用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.reader
:posix
被默認設置爲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。
對於你的情況shlex.split將會很好。
至於答案multiple delimiters?
import re
re.split('\"|\s', string)
如果我理解你的權利,那麼你可以使用正則表達式
>>> import re
>>> text = 'This is "a simple" test'
>>> re.split('\s|\"', text)
[ '這個', '是', '', 'a','簡單','','測試']
使用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
嘗試重新使用:
import re
text = 'This is "a simple" test'
print(re.split('\"|\s', text))
結果:
['This', 'is', '', 'a', 'simple', '', 'test']
你可以看看shlex庫。
from shlex import split
a = 'This is "a simple" text'
split(a)
[ '這個', '是', '簡單', '文字']
我不認爲正則表達式是你在找什麼