python 用引号和空格拆分文本

python split text by quotes and spaces

我有以下文字

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']

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 上,您不需要将字符串解码为 un​​icode,因为所有字符串都已经是 unicode。

对于你的情况 shlex.split 就可以了。

作为对multiple delimiters?

的回答
import re

re.split('\"|\s', string)

如果我没理解错,那么你可以使用正则表达式

>>> import re
>>> text = 'This is "a simple" test'

>>> re.split('\s|\"', text)

['This', 'is', '', 'a', 'simple', '', 'test']

使用 csv reader。

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

尝试使用 re:

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)

['This', 'is', 'a simple', 'text']

我认为正则表达式不是您要找的东西