Python3從頭 尾刪除子符串的正確操作

2021-10-20 19:20:45 字數 2618 閱讀 3001

一、說明

從某個時候發現python的字串變數自帶的strip()方法,除了可以刪除字串頭尾的空格,還可以用來刪除頭尾的字串覺得很好用。也就一直這麼用,一直也沒發現什麼問題。

今天在修復乙個bug時使用了strip()方法但從結果看bug並沒有按預期被消除,一是沒懷疑strip()刪除子字串有什麼問題,二是程個**比較長,三是依賴的下層庫並不太可靠,排查了大半天最後才知道是對strip()用途理解錯所致,算是吃了大虧。

二、錯誤的刪除子字串操作示例

1 錯誤的strip()操作

假設我們有以下乙個字串,我們通過rstrip()刪除其尾部的「str」子串沒有問題,但通過rstrip()刪除其尾部的「_str」子串時卻出現問題。

# 示例字串

test_str =

"this_is_a_test_str"

# 期望刪除尾部的「str」,結果與預期相符

# 預期是「this_is_a_test_」,結果也是「this_is_a_test_」

test_str.rstrip(

"str"

)# 期望刪除尾部的「_str」,結果與預期不相符。

# 預期是「this_is_a_test」,實際是「this_is_a_te」

2 strip()原理說明之所以會出現出現上邊這種不符合預期的情況,是因為strip()根本不是用來刪除「給定的字串」的,而是用來刪除給定的字符集直到遇到不在字符集中的字元為止。

test_str.rstrip("str")中,字符集是s、t、r三個字元,字串按rstrip()指示從右向左開始查詢字元進行刪除,當刪除完str後遇到了_,而_不在字符集中所以刪除就停止了,所以得到的結果是this_is_a_test_;和刪除」str「字串結果相一致,但這只是一種巧合。

test_str.rstrip("_str")時,字符集是_、s、t、r四個字元,字串按rstrip()指示從右向左開始查詢字元進行刪除,當刪除完_str後接下來的」t「和」s「仍都在字符集中所以仍被刪除,所以得到的結果是this_is_a_te,而不是this_is_a_test

3 乙個典型的字串擷取錯誤【可跳過】

'''

'''# 示例字串

test_str =

"this_is_a_test_str"

# 以下操作期望能去截去頭部的this和尾部的str

# 期忘得到「is_a_test」,實際結果是「a_test_str」

test_str.lstrip(

"this_")[

:test_str.rindex(

"_")

]

左邊為什麼is_也被刪了在上一小節已經說清楚了,那為什麼右邊的_str沒有被刪除呢,這是因為lstrip()並不修改原先的test_str而是返回乙個新的字串,而test_str.rindex("_")定位到的仍是原先this_is_a_test_str_的位置而不是新返回來a_test_str_的位置。

三、正確的刪除子字串操作

有些地方說可以使用字串自帶的replace()方法,但replace()會將所有匹配都進行替換這很粗糙,我們更多時候是想刪掉明確位置的字串。

1 使用len()

# 示例字串

test_str =

"this_is_a_test_str"

# 期望得到「this_is_a_test」,實際結果也是「this_is_a_test」

2 使用re.sub()

import re

# 示例字串

test_str =

"this_is_a_test_str"

# 期望得到「this_is_a_test」,實際結果也是「this_is_a_test」

python3字串相等 python3 字串

1 拼接 1 多個字串進行連線 連線符,必須左右資料型別一致 例 print hello world 結果 helloworld 例 print 5 world 結果 typeerror unsupported operand type s for int and str 2 多個相同字串連線 字串...

python3運算子 Python3 運算子

python3 運算子 python3 支援以下型別運算子 算術運算子 比較 關係 運算子 賦值運算子 邏輯運算子 位運算子 成員運算子 身份運算子 運算子優先順序 算術運算 a b 2,3 運算子說明 示例加 將兩個物件相加 a b 結果 5 減 將兩個物件相減 a b 結果 1 乘 將兩個物件相...

python3運算子 Python3運算子

什麼是運算子?本章節主要說明python的運算子。舉個簡單的例子 4 5 9。例子中,4 和 5 被稱為運算元,稱為運算子。python語言支援以下型別的運算子 算術運算子 比較 關係 運算子 賦值運算子 邏輯運算子 位運算子 成員運算子 身份運算子 運算子優先順序 接下來讓我們乙個個來學習pyth...