python string replace()方法在用周围的空格替换字符时只替换第一次出现的字符

python string replace()方法在用周围的空格替换字符时只替换第一次出现的字符,python,string,replace,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! &g

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

>>> 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不能替换最后两种情况下的工作呢?

问题是出现的情况有重叠


在字符串中:
“a a b”
由于空格重叠,因此没有两次出现
“a”
。替换第一个引用后,字符串的其余部分是与您的模式不匹配的
“a b b”
,问题是引用中存在重叠


在字符串中:
“a a b”
由于空格重叠,因此没有两次出现
“a”
。替换第一个匹配项后,字符串的其余部分是与您的模式不匹配的
“a b b”
,由于找到的子字符串重叠,因此无法工作。
找到的第一个匹配项是“a”,字符串的其余部分是“a b”,因此它当然不会再次匹配“a”

因为找到的子字符串重叠,所以它不起作用。
找到的第一个匹配项是“a”,字符串的其余部分是“a b”,因此它当然不会再次匹配“a”

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

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

  • (?改用正则表达式,因为它可以防止重叠引起的问题。请参阅以下正则表达式:

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

    • (?您的问题是您只有一个要替换的字符串实例。让我们对您的字符串进行分解:

      " a a b b "
      
      这是:

    • 空间
    • a
    • 空间
    • a
    • 空间
    • b
    • 空间
    • b
    • 空间
    • 当您要求替换“a”时,它正在查找:

    • 空间
    • a
    • 空间

    • 只有一组(从左开始),因此只有一个替换。

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

      " a a b b "
      
      这是:

    • 空间
    • a
    • 空间
    • a
    • 空间
    • b
    • 空间
    • b
    • 空间
    • 当您要求替换“a”时,它正在查找:

    • 空间
    • a
    • 空间

    • 只有一套(从左开始),因此只有一个替换。

      +1这是一个有效的解决方案。可能没有被接受,因为它没有解释OP的重叠问题以及正则表达式如何解决它。+1这是一个有效的解决方案。可能没有被接受,因为它没有解释OP的重叠问题以及正则表达式如何解决它。