有选择地删除字符串中的空格

时间:2018-05-24 16:27:19

标签: python string python-3.x replace

我有一个以下格式的字符串:

'[        A A A A A          B B B B B B B B      A A A A A         ]'

我希望开始前和结束后的空格完全消失,但两者之间的空间减少一半。所以输出应该如下:

'[AAAAA     BBBBBBBB   AAAAA]'

每个字符之间有一个空格,必须删除。个别单词之间的空间必须减少一半。在上面的例子中,A A A A和B B B B B B B B之间的空间是10个空格。但在输出中我需要将AAAA和BBBBBBBB分隔5个空格。

1 个答案:

答案 0 :(得分:2)

使用re.sub,您需要多个正则表达式模式才能完成此任务。以下是每个步骤中应用于字符串的步骤和转换。

import re

s = '[        A A A A A          B B B B B B B B      A A A A A         ]'

# Using a lookbehind, we remove spaces preceeded by a [
s = re.sub('(?<=\[) +', '', s)
# s: '[A A A A A          B B B B B B B B      A A A A A         ]'

# Using a lookahead, we remove spaces followed by a ]
s = re.sub(' +(?=\])', '', s)
# s: '[A A A A A          B B B B B B B B      A A A A A]'

# Using a lookaround, we remove space not followed or preceeded by another space
s = re.sub('(?<! ) (?! )', '', s)
# s: '[AAAAA          BBBBBBBB      AAAAA]'

# Finally, we use str.replace to cut out half of the spaces
s = s.replace('  ', ' ')

print(s) # '[AAAAA     BBBBBBBB   AAAAA]'

上述步骤可以使用regexp union合并并链接re.substr.replace操作。

s = re.sub('((?<=\[) +)|( +(?=\]))|((?<! ) (?! ))', '', s).replace('  ', ' ')