我有以下文字
text = 'This is "a simple" test'
我需要以两种方式拆分它,首先是引号然后是空格,导致:
res = ['This', 'is', '"a simple"', 'test']
但是使用str.split()
我只能使用引号或空格作为分隔符。是否有多个分隔符的内置函数?
答案 0 :(得分:9)
您可以使用shlex.split
,方便解析引用的字符串:
>>> import shlex
>>> text = 'This is "a simple" test'
>>> shlex.split(text, posix=False)
['This', 'is', '"a simple"', 'test']
在 non-posix 模式下执行此操作可防止从拆分结果中删除内部引号。默认情况下,posix
设置为True
:
>>> shlex.split(text)
['This', 'is', 'a simple', 'test']
如果您有多行此类文字,或者您正在从流中读取,则可以使用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']]
如果在Python 3上,您不需要将字符串解码为unicode,因为所有字符串都已经是unicode。
答案 1 :(得分:2)
如果我理解你,那么你可以使用正则表达式
>>> import re
>>> text = 'This is "a simple" test'
>>> re.split('\s|\"', text)
['这','是','','a','简单','','测试']
答案 2 :(得分:1)
对于你的情况,shlex.split会做得很好。
作为对multiple delimiters?
import re
re.split('\"|\s', string)
答案 3 :(得分:0)
答案 4 :(得分:0)
尝试使用re:
import re
text = 'This is "a simple" test'
print(re.split('\"|\s', text))
结果:
['This', 'is', '', 'a', 'simple', '', 'test']
答案 5 :(得分:0)
您可以查看shlex库。
from shlex import split
a = 'This is "a simple" text'
split(a)
['这',','一个简单的','文字']
我不认为正则表达式是你正在寻找的