我这里有一个这样的字符串:
"BLAX", "BLAY", "BLAZ, BLUBB", "BLAP"
是的,双引号位于该字符串内。
现在,我想用mystring.split(",")
将此字符串分成几个部分
我得到的是这个
"BLAX"
"BLAY"
"BLAZ
BLUBB"
"BLAP"
但是我想要的是这个
"BLAX"
"BLAY"
"BLAZ, BLUBB"
"BLAP"
如何实现此目的,并且还要保留双引号?我需要这个,因为我使用的是toml文件。
解决方案: 谢谢@Giacomo Alzetta
我在正则表达式中使用了split命令。也感谢您对此的解释!
答案 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)
您可以replace
和split
s.replace('", ', '"|').split('|')
Out[672]: ['"BLAX"', ' "BLAY"', ' "BLAZ, BLUBB"', ' "BLAP"']