我有一个字符串,当我的字符周围有空格时,我试图替换它,如下所示:
>>> strvar = " a a b b "
>>> strvar.replace('a', 'r')
" r r b b " # WORKS!
>>> strvar.replace('a ', 'r ')
" r r b b " # WORKS!
>>> strvar.replace(' a', ' r')
" r r b b " # WORKS!
>>> strvar.replace(' a ', ' r ')
" r a b b " # only first occurrence is replaced
>>> strvar.replace(' b ', ' r ')
" a a r b " # only first occurrence is replaced
我的问题是为什么不能在最后两种情况下替换python?
答案 0 :(得分:3)
请改用正则表达式,因为它可以防止重叠导致的问题。请参阅以下正则表达式:
r'(?<= )a(?= )'
替换为:
r
(?<= )
是一个积极的后视组,声称该匹配符合“”。(?= )
是一个积极的前瞻小组,声称匹配后跟“”。答案 1 :(得分:1)
您的问题是您只有一个要替换的字符串实例。让我们分解你的字符串:
" a a b b "
这是:
a
a
b
b
当您要求替换' a '
时,它正在寻找:
a
只有一组(从左开始),因此只有一个替换。
答案 2 :(得分:0)
问题是事件发生了重叠。
在字符串中:" a a b b "
" a "
没有两次出现,因为空格重叠。替换第一次出现后,字符串的其余部分为"a b b"
,与您的模式
答案 3 :(得分:0)
它不起作用,因为找到的子字符串是重叠的。 第一次发现是'a',其余的字符串是'a b b',所以当然它再也不会匹配'a'