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

Jon*_*eon 7 python split

python 2.7代码

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

newStr = cStr.split(',')

print newStr 

# result : ['"aaaa"','"bbbb"','"ccc','ddd"' ]
Run Code Online (Sandbox Code Playgroud)

但是,我想要这个结果.

result = ['"aaa"','"bbb"','"ccc,ddd"'] 
Run Code Online (Sandbox Code Playgroud)

救命..

Rom*_*est 13

使用re.split()函数的解决方案:

import re

cStr = '"aaaa","bbbb","ccc,ddd"'
newStr = re.split(r',(?=")', cStr)

print newStr
Run Code Online (Sandbox Code Playgroud)

输出:

['"aaaa"', '"bbbb"', '"ccc,ddd"']
Run Code Online (Sandbox Code Playgroud)

,(?=")- 前瞻性肯定断言,确保分隔符,后跟双引号"


Gyu*_*hoi 11

尝试使用CSV.

import csv
cStr = '"aaaa","bbbb","ccc,ddd"'
newStr = [ '"{}"'.format(x) for x in list(csv.reader([cStr], delimiter=',', quotechar='"'))[0] ]

print newStr
Run Code Online (Sandbox Code Playgroud)

检查Python解析CSV忽略带双引号的逗号


Pau*_*McG 9

pyparsing 有一个内置表达式commaSeparatedList

cStr = '"aaaa","bbbb","ccc,ddd"' 
import pyparsing as pp
print(pp.commaSeparatedList.parseString(cStr).asList())
Run Code Online (Sandbox Code Playgroud)

印刷:

['"aaaa"', '"bbbb"', '"ccc,ddd"']
Run Code Online (Sandbox Code Playgroud)

您还可以添加一个解析时操作来去除这些双引号(因为您可能只想要内容,而不是引号):

csv_line = pp.commaSeparatedList.copy().addParseAction(pp.tokenMap(lambda s: s.strip('"')))
print(csv_line.parseString(cStr).asList())
Run Code Online (Sandbox Code Playgroud)

给出:

['aaaa', 'bbbb', 'ccc,ddd']
Run Code Online (Sandbox Code Playgroud)

  • 对于几年后阅读本文的任何人来说,“commaSeparatedList”已被弃用,取而代之的是“common.comma_separated_list” (3认同)

Gos*_*ull 6

通过使用正则表达式试试这个:

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

在此处输入图片说明