【问题标题】:Split by comma and how to exclude comma from quotes in split in python用逗号分割以及如何在python中的分割中从引号中排除逗号
【发布时间】:2021-04-04 08:16:30
【问题描述】:

我正在努力根据逗号拆分此字符串,但应忽略双引号内的逗号。

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

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

请帮帮我,我尝试了以下解决方案中提到的不同方法,但无法解决此问题[我不允许使用 csv,pyparsing 模块]

之前已经针对以下输入提出了类似的问题。

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

solution

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

【问题讨论】:

标签: python python-3.x split


【解决方案1】:

我处理此问题的常用方法是使用正则表达式替换,它首先热切匹配双引号术语,然后是未引用的 CSV 术语:

import re

cStr = 'aaaa,bbbb,"ccc,ddd"'
matches = re.findall(r'(".*?"|[^,]+)', cStr)
print(matches)  # ['aaaa', 'bbbb', '"ccc,ddd"']

【讨论】:

  • 感谢@Tim Biegeleisen,它解决了这个问题,但是如果我们在字符串中有双引号,我们会怎么做。 cStr = 'aaaa,"ccc,ddd","bb"bb"' 预期结果 -> ['aaaa', '"ccc,ddd"', '"bb"bb"']
  • 为了解决这两个 cmets,如果您期望引号不平衡,那么正则表达式不是正确的工具,您应该使用解析器或编写自己的解析器。
【解决方案2】:

您可以使用列表推导,不需要其他库:

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

# split by ," afterwards by , if item does not end with double quotes
l = [
    item.split(',') if not item.endswith('"') else [item[:-1]]
    for item in cStr.split(',"')
]
print(sum(l, []))

输出:

['aaaa', 'bbbb', 'ccc,ddd']

【讨论】:

  • 输出中的ccc,ddd 缺少双引号。可能只是一个小修复。
【解决方案3】:

这可以通过三个步骤来实现-

cstr = 'aaaa,bbbb,"ccc,ddd","eee,fff,ggg"'

步骤 1-

X = cstr.split(',"')

第 2 步-

regular_list = [i if '"' in i else i.split(",") for i in X ]

第 3 步-

final_list = []
for i in regular_list:
    if type(i) == list:
        for j in i:
            final_list.append(j)
    else:
        final_list.append('"'+i)

最终输出 -

['aaaa', 'bbbb', '"ccc,ddd"', '"eee,fff,ggg"']

【讨论】:

    猜你喜欢
    • 2022-03-18
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2018-05-20
    • 2017-04-07
    • 2013-04-02
    • 2015-05-31
    相关资源
    最近更新 更多