簡體   English   中英

當用周圍的空格替換字符時,python string replace()方法僅替換第一次出現的字符串

[英]python string replace() method when replacing a character with surrounding spaces only replaces the first occurrence

我有一個字符串,當字符周圍有空格時,我將嘗試替換它,如下所示:

>>> 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不能替換工作?

請改用正則表達式,因為它可以防止重疊引起的問題。 請參閱以下正則表達式:

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

用。。。來代替:

r
  • (?<= )是一個肯定的后向組,它斷定匹配項緊跟在“”之后
  • (?= )是一個肯定的超前組,它斷言匹配后跟有“”

您的問題是您只有一個要替換的字符串實例。 讓我們分解一下字符串:

" a a b b "

這是:

  1. 空間
  2. a
  3. 空間
  4. a
  5. 空間
  6. b
  7. 空間
  8. b
  9. 空間

當您要求替換' a '它正在尋找:

  1. 空間
  2. a
  3. 空間

只有一組(從左開始),因此只有一個替換。

問題是出現次數重疊。

在字符串" aabb "中,因為空格重疊,所以沒有兩次出現" a " 替換第一次出現的字符串后,其余字符串為"abb" ,與您的模式不匹配

它不起作用,因為找到的子字符串重疊。 找到的第一個匹配項是“ a”,字符串的其余部分是“ abb”,因此當然不會再次匹配“ a”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM