python用引号和空格拆分文本

was*_*256 5 python split delimiter

我有以下文字

text = 'This is "a simple" test'
Run Code Online (Sandbox Code Playgroud)

我需要以两种方式拆分它,首先是引号然后是空格,导致:

res = ['This', 'is', '"a simple"', 'test']
Run Code Online (Sandbox Code Playgroud)

但是str.split()我只能使用引号或空格作为分隔符.是否有多个分隔符的内置函数?

Mos*_*oye 9

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

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

非posix模式下执行此操作可防止从拆分结果中删除内部引号.默认情况下posix设置为True:

>>> shlex.split(text)
['This', 'is', 'a simple', 'test']
Run Code Online (Sandbox Code Playgroud)

如果您有多行此类文本或您正在从流中读取,则可以使用以下方法有效地拆分(不包括输出中的引号)csv.reader:

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']]
Run Code Online (Sandbox Code Playgroud)

如果在Python 3上,您将不需要将字符串解码为unicode,因为所有字符串都已经是unicode.