Python3中String(字符串)操作詳解

String(字符串)作為Python中的基礎(chǔ)數(shù)據(jù)類型之一,在每個(gè)項(xiàng)目中都必然會(huì)用到。我們經(jīng)常需要對(duì)字符串進(jìn)行一些列的操作,比如:拼接、查找、比較、設(shè)置對(duì)齊、拆分、截取、搜索、替換、組合、編碼等等操作。那么,對(duì)于字符串的操作有個(gè)一個(gè)詳細(xì)地了解就顯得十分必要。以下是部分String的操作方法:

大小寫操作

在英文中、頁面的展示中,我們經(jīng)常需要對(duì)字符串進(jìn)行大小寫轉(zhuǎn)換的操作。如全部轉(zhuǎn)換成大寫、小寫、首字母大寫等。

全部轉(zhuǎn)換成大寫 -> string.upper()
str = 'louis drink'
str.upper()    # 'LOUIS DRINK'

使用upper()方法,會(huì)將字符串中的所有英文字母轉(zhuǎn)換成大寫格式。

全部轉(zhuǎn)換成小寫 -> string.lower()
str = 'LOUIS DRINK'
str.lower()    # 'louis drink'

使用lower()方法,會(huì)將字符串中的所有英文字母轉(zhuǎn)換成小寫格式。

首字母大寫 -> string.capitalize()
str = 'louis drink'
str.capitalize()    # 'Louis drink'

使用capitalize()方法,會(huì)將整個(gè)字符串的首字母轉(zhuǎn)換成大寫格式。

所有單詞首字母大寫 -> string.title()
str = 'louis drink'
str.title()    # 'Louis Drink'

使用title()方法,會(huì)將整個(gè)字符串中的每一個(gè)單詞的首字母轉(zhuǎn)換成大寫格式。

查詢 -> string.index() / string.find()

Python3中的字符串的查詢有兩種方法,分別是string.index()與string.find方法。兩者有細(xì)微差別:

name = 'Louis Drink'
name.index('i')    # 3
name.index('a')    # 崩潰
name.find('i')     # 3
name.find('a')     # -1

從上述代碼中,我們不難看出,當(dāng)查詢字符串中確定有的子字符串的情況下,string.index()方法和string.find()的方法沒有區(qū)別,都是返回的字符串中所含有的子字符串的首字母的下標(biāo)位置。

然而當(dāng)在查詢字符串中沒有含有的子字符串的情況下,string.index()方法會(huì)直接崩潰,而string.find()方法是返回一個(gè)int類型的數(shù)字-1。在這種情況下,顯然string.find()方法會(huì)更具有容錯(cuò)性,所以在開發(fā)中,推薦使用string.find()方法。

統(tǒng)計(jì) -> string.count()

name = 'Louis Drink'
name.count('i')    # 2

string.count()方法是用來統(tǒng)計(jì),該子字符串在字符串中出現(xiàn)的次數(shù)。如我們?cè)谏鲜隼又校y(tǒng)計(jì)字符串'i'在name中出現(xiàn)了幾次。返回結(jié)果2則表示'i'在name中,一共出現(xiàn)了兩次。

字符串拼接

我們?cè)谡{(diào)試、展示頁面、返回信息的時(shí)候,經(jīng)常會(huì)使用固定語句格式拼接上一些我們的變量,如,'歡迎{人名}蒞臨檢查!'中,人名就是一個(gè)變量。那么字符串的拼接有幾種方法呢?

使用+直接拼接
first_name = 'Drink'
last_name = 'Louis'
str = last_name + ' ' + first_name    # 'Louis Drink'

幾個(gè)字符串可以直接使用+來拼接起來,格式就如上述代碼所示。

使用占位符拼接
name = 'Drink'
place = 'Xiamen'
'Hello %s, welcome to %s!' %(name, place)    
# 'Hello Drink, welcome to Xiamen!'

這里使用%s占位符,表示在該地方需要拼接入一個(gè)字符串參數(shù)。同時(shí)這里也可以替換成其他的占位符,詳細(xì)的占位符信息請(qǐng)查看:Python3中的占位符詳解。

使用格式碼拼接 -> string.format()
name = 'Drink'
place = 'Xiamen'
'Hello {}, welcome to {}!' .format(name, place)    
# 'Hello Drink, welcome to Xiamen!'

使用.format方法的話,可以直接用{}代替占位符,來標(biāo)記我們需要添加信息的位置。每一個(gè){}對(duì)應(yīng)一個(gè)需要拼接的地方,所以后面.format里的參數(shù)一定要與前邊的{}數(shù)量一致。
.format()拼接還有另一種更清晰的方式,但是使用起來相對(duì)麻煩。

name = 'Drink'
place = 'Xiamen'
'Hello {person_name}, welcome to {person_city}!' .format(person_name = name, person_place = place)    
# 'Hello Drink, welcome to Xiamen!'
Python3中特有的拼接方式
name = 'Drink'
place = 'Xiamen'
f'Hello {name}, welcome to {place}!' 
# 'Hello Drink, welcome to Xiamen!'

我們可以在字符串前加個(gè)字母f,然后直接在字符串中的{}中填入我們需要拼接的變量名稱,就可以直接拼接。使用這種方法,無需在字符串后面再去書寫%(變量名)或.format(變量名)。會(huì)更為簡(jiǎn)潔和清晰。推薦使用這種方法!

對(duì)齊 -> string.center() / string.ljust() / string.rjust()

在開發(fā)中,為了保證美觀,我們常常會(huì)需要使字符串居中、左對(duì)齊、右對(duì)齊等,這就需要用到對(duì)齊的操作方法。

name = 'Louis Drink'
name.center(40)        # '              Louis Drink               '
name.ljust(40, '-')    # 'Louis Drink-----------------------------'
name.rjust(40, )       # '                             Louis Drink'

從上述的代碼中不難看出,string.center(), string.ljust(), string.rjust分別是對(duì)應(yīng)居中對(duì)齊、左對(duì)齊、右對(duì)齊的方法。每個(gè)方法都有兩個(gè)參數(shù):

  • 第一個(gè)參數(shù):width(寬度)(必填)
  • 第二個(gè)參數(shù):填充符(不填默認(rèn)填充空格)

以什么結(jié)束 -> string.endswith()

name = 'Louis Drink'
name.endswith('k')     # True
name.endswith('nk')    # True
name.endswith('i')     # False

使用string.endswith()方法時(shí),會(huì)去判斷字符串的最后的子字符串與你在方法中填入的字符串是否相同。結(jié)果返回bool類型的True或False。

判斷

'123'.isalnum()              # True
'123abc'.isalnum()           # True
'123.abc'.isalnum()          # False

'abc'.isalpha()              # True
'123abc'.isalpha()           # False

'123'.isdigit()              # True
'123.123'.isdigit()          # False

'abc'.isidentifier()         # True
'abc123'.isidentifier()      # True
'123abc'.isidentifier()      # False
'123'.isidentifier()         # False
''abc.123'.isidentifier()'   # False

'LOUIS DRINK'.isupper()      # True
'Louis Drink'.isupper()      # False
'louis drink'.islower()      # True
'Louis Drink'.islower()      # False

'123'.isdecimal()            # True
'一二三'.isdecimal()          # False
'一二三'.isnumeric()          # True

在字符串中,有幾種比較常見的判斷方法,分別是:

  • string.isalnum() -> 判斷字符串中是否全部為數(shù)字或者英文
  • string.isalpha() -> 判斷字符串中是否全部為純英文字符
  • string.isdigit() -> 判斷字符串中是否全部為整數(shù)
  • string.isidentifire() -> 判斷字符串是不是一個(gè)合法的標(biāo)識(shí)符
  • string.isupper() -> 判斷字符串中是否全是大寫字母
  • string.islower() -> 判斷字符串中是否全是小寫字母
  • string.isdecimal() -> 判斷是否是十進(jìn)制數(shù)字
  • string.isnumeric() -> 判斷是否是可做標(biāo)記用的數(shù)字,包含數(shù)字、分?jǐn)?shù)、特殊標(biāo)記字符和中文,但不包含英文
  • 判斷范圍:string.isnumeric() > string.isdigit() > string.isdecimal()
Tips 標(biāo)識(shí)符的規(guī)則:
  • 必須以字母或下劃線開始
  • 不能與保留字相同
  • 避免與Python中已有的標(biāo)識(shí)符相同

替換 -> string.replace()

name = 'Louis Drink'
name.replace('Drink', 'Lu', 1)    # 'Louis Lu'

使用string.replace()方法的時(shí)候,需要傳三個(gè)參數(shù),他們依次分別是:

  • 第一個(gè)參數(shù):old_value,就是字符串中現(xiàn)有的要替換的內(nèi)容
  • 第二個(gè)參數(shù):new_value,就是要將現(xiàn)有內(nèi)容替換掉的內(nèi)容
  • 第三個(gè)參數(shù):count,就是要替換的個(gè)數(shù)

如上述例子中,我們要把現(xiàn)有的'Drink'替換成'Lu',替換的個(gè)數(shù)為1。

Tips:最后的count可不填,如果不填寫數(shù)量的話,默認(rèn)替換掉字符串中所有的old_value。

拆分 -> string.split()

mail = 'louisdrink@163.com'
mail.split('@')    #['louisdrink', '163.com']

使用string.split()方法的時(shí)候,會(huì)先去判斷該字符串里面有沒有我們要拆分的字符。

如果有的話,會(huì)返回一個(gè)列表,里面包含兩個(gè)字符串,分別是我們要拆分的字符之前的字符串和之后的字符串,但不包含我們要拆分的字符。

如果沒有的話,仍然會(huì)返回一個(gè)列表,但是列表里只有一個(gè)元素,那就是我們?cè)疽M(jìn)行拆分的字符串。

另外,還有個(gè)方法是換行拆分:string.splitlines()。用途是,如果該字符串里有換行符的話,會(huì)按換行符前后自動(dòng)拆分成一個(gè)個(gè)元素,然后組成一個(gè)列表。如果沒有換行符,仍然返回一個(gè)元素的列表。

連接列表 ->string.join()

singers = ['周杰倫', '林俊杰', '陳奕迅', '李宗盛', '薛之謙']
'--'.join(singers)    # '周杰倫--林俊杰--陳奕迅--李宗盛--薛之謙'

使用string.join()來連接字符串列表,會(huì)將字符串、元組、列表中的元素以指定的字符(分隔符)連接成一個(gè)新的字符串。

去除空格或指定字符 -> string.strip()

name = '    Louis Drink    '
name.strip()    # 'Louis Drink'
name.lstrip()    # 'Louis Drink    '
name.rstrip()    # '    Louis Drink'

name = 'Louis Drink'
name.lstrip('L')    # 'ouis Drink'
name.rstrip('k')    # 'Louis Drin'

使用string.strip系列方法,需要注意一下幾個(gè)點(diǎn):

  • string.strip()系列方法,可填要?jiǎng)h除的字符串,如果不填字符串,則默認(rèn)刪除空格
  • string.strip()為刪除兩邊開始的指定字符串
  • string.lstrip()為刪除左邊開始的指定字符串
  • string.rstrip()為刪除右邊開始的指定字符串
  • 如果指定字符串在句子中間,則不會(huì)被刪除
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,701評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,694評(píng)論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,026評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,193評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,719評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,668評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,846評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評(píng)論 1 295
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,394評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,635評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容

  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí),c語言,java語言,單片機(jī)的匯編語言等;大學(xué)畢...
    oceanfive閱讀 3,124評(píng)論 0 7
  • 就業(yè)競(jìng)爭(zhēng)壓力好大 隨著社會(huì)經(jīng)濟(jì)水平的發(fā)展,我國(guó)教育普及率提高,人們對(duì)于教育的重要性的認(rèn)知水平提升,越來越多的家長(zhǎng)讓...
    Janets閱讀 163評(píng)論 0 0
  • 今天下午奶奶開車送我和妹妹到學(xué)校去領(lǐng)家庭報(bào)告書,回到教室老師發(fā)回報(bào)告書之后老師就發(fā)試卷下來說誰的分?jǐn)?shù)高,誰的分?jǐn)?shù)少...
    曹捷捷閱讀 163評(píng)論 0 1
  • 2018-02-01學(xué)習(xí)心得分享: 《大易教育》的“大易”,就是大大的容易,凡事越是簡(jiǎn)單越容易學(xué)習(xí);越是簡(jiǎn)...
    泉州煒圣媽閱讀 222評(píng)論 0 0
  • 本文主要講解使用keras時(shí)關(guān)于學(xué)習(xí)率衰減的實(shí)現(xiàn),目前是國(guó)外大牛的一篇文章,英文的,先消化,后續(xù)有時(shí)間在進(jìn)行翻譯。...
    nightwish夜愿閱讀 1,021評(píng)論 1 0