我有以下文字蟒蛇用引号和空格分割文本
text = 'This is "a simple" test'
,我需要它在两个方面分开,先用双引号,然后用空格,导致:
res = ['This', 'is', '"a simple"', 'test']
但与str.split()
我只能使用引号或空格作为分隔符。有多个分隔符的内置函数吗?
我有以下文字蟒蛇用引号和空格分割文本
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']
在非POSIX模式这样做可以防止去除分割结果内报价。
>>> shlex.split(text)
['This', 'is', 'a simple', 'test']
如果你有这种类型的文本的多条线路,或者你从流中读取,你可以拆分有效(不输出引号)使用csv.reader
:posix
被默认设置为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。
对于你的情况shlex.split将会很好。
至于答案multiple delimiters?
import re
re.split('\"|\s', string)
如果我理解你的权利,那么你可以使用正则表达式
>>> import re
>>> text = 'This is "a simple" test'
>>> re.split('\s|\"', text)
[ '这个', '是', '', 'a','简单','','测试']
使用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
尝试重新使用:
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)
[ '这个', '是', '简单', '文字']
我不认为正则表达式是你在找什么