使用周围空格替换字符时,python string replace()方法仅替换第一个匹配项

时间:2014-07-27 11:08:09

标签: python string replace

我有一个字符串,当我的字符周围有空格时,我试图替换它,如下所示:

>>> 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?

4 个答案:

答案 0 :(得分:3)

请改用正则表达式,因为它可以防止重叠导致的问题。请参阅以下正则表达式:

r'(?<= )a(?= )'

替换为:

r
  • (?<= )是一个积极的后视组,声称该匹配符合“”
  • (?= )是一个积极的前瞻小组,声称匹配后跟“”

答案 1 :(得分:1)

您的问题是您只有一个要替换的字符串实例。让我们分解你的字符串:

" a a b b "

这是:

  1. 空间
  2. a
  3. 空间
  4. a
  5. 空间
  6. b
  7. 空间
  8. b
  9. 空间
  10. 当您要求替换' a '时,它正在寻找:

    1. 空间
    2. a
    3. 空间
    4. 只有一组(从左开始),因此只有一个替换。

答案 2 :(得分:0)

问题是事件发生了重叠。

在字符串中:" a a b b " " a "没有两次出现,因为空格重叠。替换第一次出现后,字符串的其余部分为"a b b",与您的模式

不匹配

答案 3 :(得分:0)

它不起作用,因为找到的子字符串是重叠的。 第一次发现是'a',其余的字符串是'a b b',所以当然它再也不会匹配'a'