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的重叠问题以及正则表达式如何解决它。