python 2.7代码
cStr = '"aaaa","bbbb","ccc,ddd"'
newStr = cStr.split(',')
print newStr
# result : ['"aaaa"','"bbbb"','"ccc','ddd"' ]
但是,我想要这个结果。
result = ['"aaa"','"bbb"','"ccc,ddd"']
帮助..
答案 0 :(得分:9)
使用re.split()函数的解决方案:
import re
cStr = '"aaaa","bbbb","ccc,ddd"'
newStr = re.split(r',(?=")', cStr)
print newStr
输出:
['"aaaa"', '"bbbb"', '"ccc,ddd"']
,(?=")
- 前瞻性肯定断言,确保分隔符,
后跟双引号"
答案 1 :(得分:8)
尝试使用CSV。
import csv
cStr = '"aaaa","bbbb","ccc,ddd"'
newStr = [ '"{}"'.format(x) for x in list(csv.reader([cStr], delimiter=',', quotechar='"'))[0] ]
print newStr
答案 2 :(得分:2)
在这种情况下使用正则表达式会更好。
re.findall('".*?"', cStr)
完全返回您需要的内容
asterisk是贪婪的通配符,如果你使用'".*"'
,它将返回最大匹配,即在第一个和最后一个双引号之间的所有内容。问号使其不贪心,因此'".*?"'
返回最小的匹配。
答案 3 :(得分:2)
通过使用正则表达式,请尝试以下操作:
COMMA_MATCHER = re.compile(r",(?=(?:[^\"']*[\"'][^\"']*[\"'])*[^\"']*$)")
split_result = COMMA_MATCHER.split(string)
答案 4 :(得分:1)
pyparsing有一个内置表达式,commaSeparatedList
:
cStr = '"aaaa","bbbb","ccc,ddd"'
import pyparsing as pp
print(pp.commaSeparatedList.parseString(cStr).asList())
打印:
['"aaaa"', '"bbbb"', '"ccc,ddd"']
您还可以添加解析时动作来删除那些双引号(因为您可能只想要内容,而不是引号):
csv_line = pp.commaSeparatedList.copy().addParseAction(pp.tokenMap(lambda s: s.strip('"')))
print(csv_line.parseString(cStr).asList())
给出:
['aaaa', 'bbbb', 'ccc,ddd']
答案 5 :(得分:0)
你需要一个解析器。您可以自己构建,也可以按其中一个库服务。在这种情况下,json
可以(ab)使用。
import json
cStr = '"aaaa","bbbb","ccc,ddd"'
jstr = '[' + cStr + ']'
result = json.loads( jstr) # ['aaaa', 'bbbb', 'ccc,ddd']
result = [ '"'+r+'"' for r in result ] # ['"aaaa"', '"bbbb"', '"ccc,ddd"']
答案 6 :(得分:0)
这不是标准模块,您必须通过pip安装它,但也可以尝试tssplit:
prune
答案 7 :(得分:-1)
您可以先按"
拆分字符串,然后过滤掉''
或','
,最后格式化,这可能是最简单的方式:
['"%s"' % s for s in cStr.split('"') if s and s != ',']