![](/img/trans.png)
[英]Replace first occurrence of character in string, but only if first character
[英]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 "
這是:
a
a
b
b
當您要求替換' a '
它正在尋找:
a
只有一組(從左開始),因此只有一個替換。
問題是出現次數重疊。
在字符串" aabb "
中,因為空格重疊,所以沒有兩次出現" a "
。 替換第一次出現的字符串后,其余字符串為"abb"
,與您的模式不匹配
它不起作用,因為找到的子字符串重疊。 找到的第一個匹配項是“ a”,字符串的其余部分是“ abb”,因此當然不會再次匹配“ a”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.