我有一个以下格式的字符串:
'[ 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个空格。
答案 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.sub
和str.replace
操作。
s = re.sub('((?<=\[) +)|( +(?=\]))|((?<! ) (?! ))', '', s).replace(' ', ' ')