给出由空格分隔的一串单词.需要用逗号替换空格,忽略引号中的空格.
>>> some_string = 'one two "three four" five "six seven"'
>>> replace_func(some_string)
'one,two,"three four",five,"six seven"'
Run Code Online (Sandbox Code Playgroud)
这是一个简单的决定:
def replace_func(some_str):
lines = []
i = 1
for l in struct.split('"'):
if i % 2:
lines.append(l.replace(' ', ',')
else:
lines.append(l)
i += 1
parsed_struct = '"'.join(lines)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
jco*_*ado 11
这可以通过以下方式轻松完成shlex.split:
>>> import shlex
>>> ','.join(shlex.split(some_string))
'one,two,three four,five,six seven'
Run Code Online (Sandbox Code Playgroud)
我需要保留引号,你可以这样做:
>>> ','.join(['"{0}"'.format(fragment) if ' ' in fragment else fragment
... for fragment in shlex.split(some_string)])
'one,two,"three four",five,"six seven"'
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用正则表达式尝试这种更简单的解决方案:
>>> import re
>>> ','.join(re.findall('\"[^\"]*\"|\S+', some_string))
'one,two,"three four",five,"six seven"'
Run Code Online (Sandbox Code Playgroud)