2017-07-11 18 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) 

[ '这个', '是', '简单', '文字']

我不认为正则表达式是你在找什么