python字符串操作集合

字符串連接

把字符串變量和字面值連接起來,組成新的字符串。推薦3個(gè)方法:

str1 = "hello"
str2 = "world"
# plan 1
print(str1 + str2)
# plan2 
print("{0}{1}".format(str1, str2))
# plan2
print("".join([str1, str2]))

字符串索引與切片

對字符串進(jìn)行單個(gè)字符索引時(shí),無論是從前往后索引,還是從后往前索引,索引序號一定要在范圍內(nèi),否則出錯(cuò)。
對字符串進(jìn)行切片截取時(shí),采用str[start:end]的方式。start,end可以正,可以負(fù)。且如果start標(biāo)識的位置大于等于end標(biāo)識的位置,則截取字符串為空。start,end超出字符串的極限位置,那么就用最值。start默認(rèn)為0,end默認(rèn)為字符串長度。

str="123456"
print(str[0])  #"1"
print(str[-1])  #"6"
print(str[0:])  #"123456"
print(str[0:1])  #"1"
print(str[0:-1])  #"12345"
print(str[0:])  #"123456"
print(str[0:100])  #"123456"
print(str[-100:100])  #"123456"
print(len(str[0:100]))  #6

內(nèi)置處理函數(shù)

# 大小寫相關(guān)
str = "abCDef"
print(str.upper())  #ABCDEF
print(str.lower())  #abcdef
print(str.title())  #Abcdef
print(str.swapcase())  #ABcdEF
# 包含關(guān)系
print(str.startswith("ab"))  #True
print(str.endswith('ef'))  #True
print(str.isupper())  #False
print(str.islower())  #False
print(str.isalpha())  #True
print(str.isalnum())  #True
print(str.isdigit())  #False
str.count('ab')  #1
str.find('ab') #0
str.rfind('ab') #0
# 字符切除
str.strip()  #去掉首尾的空白
str.lstrip()  #去掉首部空白
str.rstrip()  #去掉尾部空白
str.strip('abc') #去掉首尾a、b、c字符

字符替換

str.replace('ab', 'ABG')  #ABGCDef
str.replace('ab', 'ABG', 1)  #ABGCDef
re.sub('ab', 'ABG', str)  #ABGCDef
re.sub('[abcd]', "$", str) #$$CDef
str2 = "123df567op"
re.sub('([\d]{3})[a-z]{2}', r'\1--', str2)  #123--567--
pattern = re.compile('([\d]{3})[a-z]{2}')
re.sub(pattern, r'\1--', str2)  #123--567--

字符切分

# 內(nèi)置函數(shù)
str='$123$sdf$d123$'
str.split('$')  #['', '123', 'sdf', 'd123', '']
str.split('123')  #['$', '$sdf$d', '$']
# 正則支持
re.split('\d+', str)  #['$', '$sdf$d', '$']
pattern = re.compile('\d+')
re.split(pattern, str)
# 非貪婪模式
re.split('\d+?', str)  #['#', '', '', '#sdf#d', '', '', '#']

應(yīng)用場景示例

一般的基于文本和行字符串處理,使用sed,awk,grep等工具就可以了,這些命令行工具用起來更便捷,但是也沒有python的這些函數(shù)強(qiáng)大。比如沒法實(shí)現(xiàn)非貪婪模式匹配。如下:

str = 'fun("abc", 1231) + fun("def", 13)'
# 把fun的第一個(gè)參數(shù)提取出來變?yōu)榇髮?re.findall(r'fun\("(.*?)",.*?\)', str)  #['abc', 'def']

把連續(xù)的數(shù)字提取出來,其他的字符拋棄

str = 'asb123fa#123f31'
re.split(r'[^\d]+', str)  #['', '123', '123', '31']

后記

python處理字符串,比linux命令要復(fù)雜一些,功能也更強(qiáng)大一些。對于簡單的處理任務(wù),linux命令已經(jīng)足夠,python為的是一些更復(fù)雜的處理操作。如果兩者都會(huì),豈不是更好?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容