在python中用一些值替换多个空格

时间:2017-07-07 10:50:52

标签: python

我想用“@”替换字符串中的多个空格。 如果有一个空格,那么它应该是完整的,但是如果有一个以上的连续空格,那么它将保留一个并附加@。例如

s = "Hello how  are   you."

会变成

"Hello how @are @@you"

2 个答案:

答案 0 :(得分:3)

Python 2.7:

import re
s = "Hello how  are   you"
s = re.sub("(?<= ) ", "@" ,s)

print s

或者,如果您只想让一个 @ 表示“多个空格”,请更改为("(?<= ) +", "@" ,s)

解释:正则表达式包含一个正向的后视(?<= ):它只查找前面有另一个空格的空格,但不包括结果中的第一个空格。因此,当结果被@替换时,第一个空格保持不变(前面没有另一个空格),所有其他空格都被@一个一个地替换。

+添加到主表达式意味着它将收集除第一个空格之外的所有多个空格(由于正向后观)并将其替换为单个@。

此模式只会显示“”,如果您想覆盖标签,则需要更改为\s

答案 1 :(得分:1)

编辑:看过问题的来源后,我的答案没有解决。我在源字符串中看不到额外的空格。像sg.sysel建议的正则表达式可以很好地完成工作。

如果您确实希望自己使用循环执行此操作:

def addats(s):
    i = 0
    r = ''
    for c in s:
        if c == ' ':
            if i > 0:
                r += '@'
            else:
                r += ' '
            i += 1
        else:
            r += c
            i = 0
    return r

请注意,对于实际应用程序,您应该使用类似于列表而不是r字符串的内容,但这应该可以解决您当前的问题。