【问题标题】:Selectively remove blank spaces in a string选择性地删除字符串中的空格
【发布时间】:2018-05-24 16:27:18
【问题描述】:

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

'[        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 个空格分隔。

【问题讨论】:

标签: python string python-3.x replace


【解决方案1】:

使用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]'

上述步骤可以通过使用正则表达式联合并链接re.substr.replace操作来合并。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多