使用分隔符将字符串分隔为空白,但它应在doubleqoutes和Python中的doubleqoutes中保留空白
a='Append ",","te st1",input To output'
输出列表应如下所示
['Append', '",","te st1",input', 'To', 'output']
答案 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>