仅在python中使用双引号后才拆分字符串

时间:2019-07-16 08:26:42

标签: python split

我这里有一个这样的字符串:

"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"

是的,双引号位于该字符串内

现在,我想用mystring.split(",")将此字符串分成几个部分 我得到的是这个

"BLAX"

"BLAY"

"BLAZ

BLUBB"

"BLAP"

但是我想要的是这个

"BLAX"

"BLAY"

"BLAZ, BLUBB"

"BLAP"

如何实现此目的,并且还要保留双引号?我需要这个,因为我使用的是toml文件。

解决方案: 谢谢@Giacomo Alzetta

我在正则表达式中使用了split命令。也感谢您对此的解释!

6 个答案:

答案 0 :(得分:2)

您可以使用ast.literal_eval,然后手动添加'"'

s = '"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"'

from ast import literal_eval

data = literal_eval('(' + s + ')')

for d in data:
    print('"{}"'.format(d))

打印:

"BLAX"
"BLAY"
"BLAZ, BLUBB"
"BLAP"

答案 1 :(得分:2)

您还可以使用csv模块。

例如:

import csv

s = '"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"' 
r = csv.reader(s, delimiter = ',', quotechar='"')
res = [j for i in r for j in i if j.strip()] 
print(res)  

输出:

['BLAX', 'BLAY', 'BLAZ, BLUBB', 'BLAP']

答案 2 :(得分:1)

您可以使用正则表达式和re.split函数:

>>> import re
>>> re.split(r'(?<="),', '"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"')
['"BLAX"', ' "BLAY"', ' "BLAZ, BLUBB"', ' "BLAP"']

(?<=")表示必须以" 开头,但是实际比赛中不包含",因此只有,用于实际进行拆分。

您可以除以",,但随后必须修复"现在缺失的部分:

>>> '"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"'.split('",')
['"BLAX', ' "BLAY', ' "BLAZ, BLUBB', ' "BLAP"']
>>> [el + ('' if el.endswith('"') else '"') for el in '"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"'.split('",')]
['"BLAX"', ' "BLAY"', ' "BLAZ, BLUBB"', ' "BLAP"']

答案 3 :(得分:1)

您可以将"分开,然后删除多余的剩余部分,并使用简单的list-comp重新包装所有引号。

string = '"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"'

parts = ['"{}"'.format(s) for s in string.split('"') if s not in ('', ', ')]

for p in parts:
    print(p)

输出:

"BLAX"
"BLAY"
"BLAZ, BLUBB"
"BLAP"

答案 4 :(得分:1)

正如我在评论中所说,您可以在多个分隔符之间进行拆分。逗号在引号和外部都得到一个逗号,但是我们可以在",处进行拆分(添加了一个空格,这样就不必剥离它了;))

然后我们添加缺少的引号:

original = '"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"'
[s if s.endswith('"') else s+'"' for s in original.split('", ')]

输出:['"BLAX"', '"BLAY"', '"BLAZ, BLUBB"', '"BLAP"']

此方法不使用正则表达式,因此速度更快。您也不需要使用适合您情况的正则表达式(我通常喜欢正则表达式,但是我更喜欢智能拆分和操作)。

答案 5 :(得分:0)

您可以replacesplit

s.replace('", ', '"|').split('|')

Out[672]: ['"BLAX"', ' "BLAY"', ' "BLAZ, BLUBB"', ' "BLAP"']