使用分隔符将字符串分割为空白,但它在doubleqoutes和Python中的doubleqoutes中保留空白

时间:2018-11-08 14:03:58

标签: python string python-3.x csv split

使用分隔符将字符串分隔为空白,但它应在doubleqoutes和Python中的doubleqoutes中保留空白

a='Append ",","te st1",input To output'

输出列表应如下所示

['Append', '",","te st1",input', 'To', 'output']

2 个答案:

答案 0 :(得分:0)

我找到了使用正则表达式的解决方案:

re.findall("(?:\".*?\"|\S)+", a)

给予

['Append', '",","te st1",input', 'To', 'output']

更新:改进的模式,包括转义:

re.findall("(?:\".*?[^\\\"]\"|\S)+", a)

请注意,它也通过模式的""部分与空字符串\S匹配。

注意:以下出于存档目的的旧答案:

显而易见的答案是像这样使用shlex

>>> shlex.split('Append ",","te st1",input To output')
['Append', ',,te st1,input', 'To', 'output']

很遗憾,这将删除引号。无论如何,这种问题可以通过简单的状态机解决。性能可能不及标准,但效果很好:

#!/usr/bin/env python2

import string

def split_string_whitespace(s):
    current_token = []
    result = []
    state = 0
    for c in s + " ":
        if state == 0:
            if c in string.whitespace:
                if current_token:
                    result.append("".join(current_token))
                    current_token = []
            else:
                current_token.append(c)
                if c == '"':
                    state = 1
        else:
            current_token.append(c)
            if c == '"':
                state = 0
    return result

print split_string_whitespace('Append ",","te st1",input To output')

脚本产生:

['Append', '",","te st1",input', 'To', 'output']

我很确定有人可以使用re子模块构造一些东西,所以我也在等待这个答案:)

答案 1 :(得分:0)

一个非常简单的生成器函数,保持当前的“报价状态”:

<tr *ngFor="let count of listCount">
  <ng-container *ngFor="let column of columns;let first = first; let last = last;">
    <ng-container *ngIf="check()">
        <td [attr.rowspan]="first ? 2: 1"....>
        <td>..
    </ng-container>
  </ng-container>
</tr>