python用引号和空格拆分文本

时间:2017-07-11 10:04:33

标签: python split delimiter

我有以下文字

text = 'This is "a simple" test'

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

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

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

6 个答案:

答案 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)

使用finally() 读者。

csv

您还可以查看有关here

的更多信息

答案 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)
  
    

['这',','一个简单的','文字']

  

我不认为正则表达式是你正在寻找的