用逗号替换空格忽略引号中的空格

2024-04-29 19:36:47 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个由空格分隔的字符串。需要用逗号替换空白,忽略引号中的空白。

>>> some_string = 'one two "three four" five "six seven"'
>>> replace_func(some_string)
'one,two,"three four",five,"six seven"'

下面是一个简单的决定:

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)

有什么建议吗?


Tags: stringsomeonestruct空白replacethreefour
3条回答

另一种使用正则表达式的方法:

result = re.sub(' (?=(?:[^"]*"[^"]*")*[^"]*$)', ",", subject)

这将匹配一个空格,并且仅当后面有偶数个引号时,才将其替换为逗号。因此,它将只匹配字符串外部。

^{}的帮助下,这很容易实现:

>>> import shlex
>>> ','.join(shlex.split(some_string))
'one,two,three four,five,six seven'

我你需要保留引号你可以这样做:

>>> ','.join(['"{0}"'.format(fragment) if ' ' in fragment else fragment
...           for fragment in shlex.split(some_string)])
'one,two,"three four",five,"six seven"'

或者,您可以使用正则表达式尝试这种更简单的解决方案:

>>> import re
>>> ','.join(re.findall('\"[^\"]*\"|\S+', some_string))
'one,two,"three four",five,"six seven"'

相关问题 更多 >