我想用“@”替换字符串中的多个空格。 如果有一个空格,那么它应该是完整的,但是如果有一个以上的连续空格,那么它将保留一个并附加@。例如
s = "Hello how are you."
会变成
"Hello how @are @@you"
答案 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
字符串的内容,但这应该可以解决您当前的问题。