用逗号分隔以及如何在split ... Python中从引号中排除逗号

时间:2017-03-28 10:40:16

标签: python split

python 2.7代码

cStr = '"aaaa","bbbb","ccc,ddd"' 

newStr = cStr.split(',')

print newStr 

# result : ['"aaaa"','"bbbb"','"ccc','ddd"' ]

但是,我想要这个结果。

result = ['"aaa"','"bbb"','"ccc,ddd"'] 

帮助..

8 个答案:

答案 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

检查Python parse CSV ignoring comma with double-quotes

答案 2 :(得分:2)

在这种情况下使用正则表达式会更好。 re.findall('".*?"', cStr)完全返回您需要的内容

asterisk是贪婪的通配符,如果你使用'".*"',它将返回最大匹配,即在第一个和最后一个双引号之间的所有内容。问号使其不贪心,因此'".*?"'返回最小的匹配。

答案 3 :(得分:2)

通过使用正则表达式,请尝试以下操作:

COMMA_MATCHER = re.compile(r",(?=(?:[^\"']*[\"'][^\"']*[\"'])*[^\"']*$)")
split_result = COMMA_MATCHER.split(string)

enter image description here

答案 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 != ',']