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 上,您不需要将字符串解码为 unicode,因为所有字符串都已经是 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']
我认为正则表达式不是您要找的东西
我有以下文字
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 上,您不需要将字符串解码为 unicode,因为所有字符串都已经是 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']
我认为正则表达式不是您要找的东西