系列文章目錄
個人簡介:機電專業(yè)在讀研究生,CSDN內(nèi)容合伙人,博主個人首頁
Python入門專欄:《Python入門》歡迎閱讀,一起進步!??????
碼字不易,如果覺得文章不錯或能幫助到你學習,可以點贊??收藏??評論??+關(guān)注哦!??????
導語
歡迎來到本系列教程的第六篇,之前的文章已經(jīng)介紹了基本的輸入和輸出,變量、數(shù)據(jù)類型和操作符,列表和元組,本章將重點介紹如何操作字符串和正則表達式的應用。字符串幾乎是所有編程語言在項目開發(fā)過程中涉及最多的一塊內(nèi)容,而正則表達式則是處理和匹配字符串的強大工具。在本篇博客中,我們將一步步介紹字符串的常用操作,然后深入探討正則表達式的基本語法和在 Python 中的應用。
字符串常用操作
拼接字符串
拼接字符串是將多個字符串連接成一個字符串的操作。在Python中,我們可以使用加號(+)或者字符串對象的 join()
方法來實現(xiàn)字符串的拼接。例如:
mot_en = 'Remember is a form of meeting,Frgetfulness is a form of freedom.'
mot_cn = '記憶是一種相遇,遺忘是一種自由。'
print(mot_en+'——'+mot_cn)
str_list = ['Hello','world'] # 字符串對象有個 join() 方法,接收的參數(shù)是一個由字符串組成的可迭代對象
print(' '.join(str_list)) # 連接符是一個空格
輸出結(jié)果為:
Remember is a form of meeting,Frgetfulness is a form of freedom.——記憶是一種相遇,遺忘是一種自由。
Hello world
計算字符串的長度
計算字符串的長度是獲取字符串中字符個數(shù)的操作。在 Python 中,可以使用 len()
函數(shù)來獲得字符串的長度。例如:
str1 = '人生苦短,我用Python!'
length1 = len(str1) # 計算字符串長度
print(length1)
輸出結(jié)果為:
14
從上面的結(jié)果中可以看出,在默認的情況下,通過 len()
函數(shù)計算字符串的長度時,不區(qū)分英文、數(shù)字和漢字,所有字符都認為是一個。在實際開發(fā)時,有時需要獲取字符串實際所占的字節(jié)數(shù),即如果采用 UTF-8 編碼,漢字占 3 個字節(jié),采用 GBK 或者 GB2312 時,漢字占 2 個字節(jié)。這時,可以通過使用 encode()
方法進行編碼后再進行獲取。例如,如果要獲取采用 UTF-8 或者 GBK 編碼的字符串的長度,可以使用下面的代碼:
str1 = '人生苦短,我用Python!'
length2 = len(str1.encode()) # 計算 UTF-8 編碼的字符串長度
print(length2)
length3 = len(str1.encode('gbk')) # 計算 GBK 編碼的字符串長度
print(length3)
輸出結(jié)果為:
28
21
截取字符串
截取字符串是從一個字符串中提取出部分內(nèi)容的操作。在 Python 中,可以使用切片來截取字符串。切片使用方括號和索引來指定要截取的范圍。例如:
str = "Hello World"
sub_str = str[6:11]
print(sub_str)
輸出結(jié)果為:
World
分割字符串
分割字符串是將一個字符串按照特定的分隔符拆分成多個子串的操作。在 Python 中,可以使用 split()
函數(shù)來實現(xiàn)字符串的分割。例如:
str2 = '機 電 研 究 生 >>> blog.csdn.net/a2360051431'
list1 = str2.split() # 采用默認分隔符進行分割
list2 = str2.split('>>>') # 采用多個字符進行分割
list3 = str2.split('.') # 采用"."進行分割
list4 = str2.split(' ',4) # 采用空格進行分割,并且只分割前四個
print(str(list1)+'\n'+str(list2)+'\n'+str(list3)+'\n'+str(list4))
list5 = str2.split('>') # 采用 ">" 進行分割
print(list5)
輸出結(jié)果為:
['機', '電', '研', '究', '生', '>>>', 'blog.csdn.net/a2360051431']
['機 電 研 究 生 ', ' blog.csdn.net/a2360051431']
['機 電 研 究 生 >>> blog', 'csdn', 'net/a2360051431']
['機', '電', '研', '究', '生 >>> blog.csdn.net/a2360051431']
['機 電 研 究 生 ', '', '', ' blog.csdn.net/a2360051431']
在使用
split()
方法時,如果不指定參數(shù),默認采用空白符進行分割,這時無論有幾個空格或者空白符都將作為一個分隔符進行分割。例如,上面示例中, 在 “生” 和 “>” 之間有兩個空格,但是分割結(jié)果(第一行內(nèi)容)中已經(jīng)被全部過濾掉了。但是,如果指定一個分隔符,那么當這個分隔符出現(xiàn)多個時,就會每個分隔一次,沒有得到內(nèi)容的,將產(chǎn)生一個空元素。例如,上面結(jié)果中的最后一行,就出現(xiàn)了兩個空元素。
檢索字符串
檢索字符串是在一個字符串中查找指定的子串并返回其位置的操作。在 Python 中,可以使用 count()
方法檢索指定字符串在另一個字符串中出現(xiàn)的次數(shù)。如果檢索的字符串不存在,則返回 0,否則返回出現(xiàn)的次數(shù)??梢允褂?index()
方法或者 find()
方法來實現(xiàn)字符串的檢索。
find()
方法用于檢索是否包含指定的子字符串。如果檢索的字符串不存在,則返回 -1,否則返回首次出現(xiàn)該子字符串時的索引。
index()
方法同 find()
方法類似,也是用于檢索是否包含指定的子字符串。只不過如果使用 index()
方法,當指定的字符串不存在時會拋出異常。
startswith()
方法用于檢索字符串是否以指定子字符串開頭。如果是則返回 True,否則返回 False。
endswith()
方法用于檢索字符串是否以指定子字符串結(jié)尾。如果是返回 True,否則返回 False。
str3 = '@FaceBook@扎克伯格@雷軍'
print('字符串"',str3,'"中包括',str3.count('@'),'個@符號')
print('字符串"',str3,'"中@符號首次出現(xiàn)的位置索引為:',str3.find('@'))
print('字符串"',str3,'"中@符號首次出現(xiàn)的位置索引為:',str3.index('@')) # find()檢索的字符串不存在返回-1,index()則會拋出異常
print('判斷字符串"',str3,'"是否以@符號開頭,結(jié)果為:',str3.startswith('@'))
print('判斷字符串"',str3,'"是否以雷軍結(jié)尾,結(jié)果為:',str3.endswith('雷軍'))
輸出結(jié)果為:
字符串" @FaceBook@扎克伯格@雷軍 "中包括 3 個@符號
字符串" @FaceBook@扎克伯格@雷軍 "中@符號首次出現(xiàn)的位置索引為: 0
字符串" @FaceBook@扎克伯格@雷軍 "中@符號首次出現(xiàn)的位置索引為: 0
判斷字符串" @FaceBook@扎克伯格@雷軍 "是否以@符號開頭,結(jié)果為: True
判斷字符串" @FaceBook@扎克伯格@雷軍 "是否以雷軍結(jié)尾,結(jié)果為: True
字母的大小寫轉(zhuǎn)換
字母的大小寫轉(zhuǎn)換是將字符串中的字母字符轉(zhuǎn)換為大寫或小寫形式的操作。在 Python 中,可以使用 upper()
函數(shù)將字母轉(zhuǎn)換為大寫,使用 lower()
函數(shù)將字母轉(zhuǎn)換為小寫。例如:
str = "Hello World"
upper_str = str.upper()
lower_str = str.lower()
print(upper_str)
print(lower_str)
輸出結(jié)果為:
HELLO WORLD
hello world
去除字符串中的空格和特殊字符
去除字符串中的空格和特殊字符是清理字符串中不需要的部分的操作。在 Python 中,可以使用 strip()
方法來去除字符串兩端的空格和特殊字符,也可以使用 lstrip()
方法去除字符串左邊的空格和特殊字符,或使用 rstrip()
方法去除字符串中右邊的空格和特殊字符。使用 replace()
函數(shù)來替換特定的字符。例如:
str = " Hello World! "
trimmed_str1 = str.strip()
trimmed_str2 = str.strip('! ') # 去除字符串首尾的 "!" " "
trimmed_str3 = str.lstrip()
trimmed_str4 = str.rstrip()
replaced_str = str.replace("!", "")
print(trimmed_str1)
print(trimmed_str2)
print(trimmed_str3)
print(trimmed_str4)
print(replaced_str)
輸出結(jié)果為:
Hello World!
Hello World
Hello World!
Hello World!
Hello World
格式化字符串
格式化字符串是指先制定一個模板,在這個模板中預留幾個空位,然后再根據(jù)需要填上相應的內(nèi)容。這些空位需要通過指定的符號標記(也稱為占位符),而這些符號還不會顯示出來。在Python中,可以使用占位符(%)、format()
方法、f-string 格式化字符串(更加推薦)和模板字符串來實現(xiàn)字符串的格式化。例如:
-
使用百分號(%)格式化字符串:這是一種傳統(tǒng)的格式化字符串的方法,通過在字符串中使用占位符和 % 運算符來表示要插入的變量。例如:
name = "Alice" age = 25 formatted_str = "My name is %s and I'm %d years old." % (name, age) print(formatted_str)
輸出結(jié)果為:
My name is Alice and I'm 25 years old.
-
使用字符串對象的
format()
方法:這是一種更現(xiàn)代化的格式化字符串的方法,通過在字符串中使用花括號 {} 和format()
方法來表示要插入的變量。例如:name = "Alice" age = 25 formatted_str = "My name is {} and I'm {} years old.".format(name, age) print(formatted_str)
輸出結(jié)果為:
My name is Alice and I'm 25 years old.
-
使用 f-string(格式化字符串常量):這是 Python 3.6 及更高版本引入的一種簡潔而直觀的格式化字符串的方法,通過在字符串前加上字母 “f” 并在花括號 {} 中使用變量來表示要插入的值。例如:
name = "Alice" age = 25 formatted_str = f"My name is {name} and I'm {age} years old." print(formatted_str)
輸出結(jié)果為:
My name is Alice and I'm 25 years old.
-
使用模板字符串:模板字符串是一種更靈活的字符串格式化方法,它使用
string.Template
類和占位符來替換變量。例如:from string import Template name = "Alice" age = 25 template = Template("My name is $name and I'm $age years old.") formatted_str = template.substitute(name=name, age=age) print(formatted_str)
輸出結(jié)果為:
My name is Alice and I'm 25 years old.
正則表達式基礎
在處理字符串時,經(jīng)常會有查找符合某些復雜規(guī)則的字符串的需求。正則表達式就是用于描述這些規(guī)則的工具。換句話說,正則表達式就是記錄文本規(guī)則的代碼,它使用一系列的符號和特殊字符來描述字符串的模式。接下來,讓我們了解一些正則表達式的基本概念。
行定位符
行定位符用于匹配字符串的開頭和結(jié)尾。在正則表達式中,使用 ^
表示字符串的開頭,使用 $
表示字符串的結(jié)尾。例如:
^tm # 該表達式表示要匹配以 tm 子串開頭的字符串
tm$ # 該表達式表示要匹配以 tm 子串結(jié)尾的字符串
tm # 該表達式表示要匹配 tm 子串出現(xiàn)在任意部分的字符串
元字符
元字符是正則表達式中具有特殊意義的字符。除了上面的 ^
和 $
外,正則表達式里還有更多的元字符,常見的元字符包括 .
(匹配換行符外的任意字符)、\d
(匹配數(shù)字)、\w
(匹配字母、數(shù)字、下劃線)等。例如:
元字符 | 描述 |
---|---|
. | 匹配除換行符外的任意字符。 |
\w | 匹配字母、數(shù)字或下劃線。等價于 [a-zA-Z0-9_] 。 |
\d | 匹配數(shù)字。等價于 [0-9] 。 |
\s | 匹配空白字符,包括空格、制表符、換行符等。 |
\b | 匹配單詞的邊界。 |
^ | 匹配字符串的開頭。 |
$ | 匹配字符串的結(jié)尾。 |
限定符
限定符用于指定匹配的數(shù)量。常見的限定符包括 ?
(匹配前面的元素零次或一次)、+
(匹配前面的元素一次或多次)、*
(匹配前面的元素零次或多次)等。例如:
限定符 | 描述 | 舉例 |
---|---|---|
? | 匹配前面的元素零次或一次。 | colou?r,該表達式可以匹配 colour 和 color |
+ | 匹配前面的元素一次或多次。 | go+gle,該表達式可以匹配的范圍從 gogle 到 goo…gle |
* | 匹配前面的元素零次或多次。 | go*gle,該表達式可以匹配的范圍從 ggle 到 goo…gle |
{n} | 匹配前面的元素恰好n次。 | go{2}gle,該表達式只匹配 google |
{n,} | 匹配前面的元素至少n次。 | go{2,}gle,該表達式可以匹配的范圍從 google 到goo…gle |
{n,m} | 匹配前面的元素至少n次但不超過m次。 | employe{0,2},該表達式可以匹配 employ、employe 和 employee 3 種情況 |
字符類
字符類用于匹配一組字符中的任意一個。在正則表達式中,可以使用方括號 []
來定義字符類。例如,[abc]
表示匹配字符 a、b 或 c;[aeiou]
就匹配任何一個英文元音字母。
要想匹配給定字符串中任意一個漢字,可以使用
[\u4e00-\u9fa5]
;如果要匹配連續(xù)多個漢字,可以使用[\u4e00-u9fa5]+
。
排除字符
排除字符用于匹配不在指定字符類中的字符。在正則表達式中,可以使用脫字符 ^
來表示排除字符,這個元字符在行定位符中出現(xiàn)過,表示行的開始,而這里將會放到方括號中,表示排除的意思。例如,[^0-9]
表示匹配任意非數(shù)字字符;[^a-zA-Z]
表示匹配一個不是字母的字符。
選擇字符
選擇字符用于匹配多個模式中的一個。在正則表達式中,可以使用豎線 |
來表示選擇。例如,cat|dog
表示匹配 cat 或 dog。
匹配身份證的表達式可以寫成如下方式:
(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$
該表達式的意思是匹配 15 位數(shù)字,或者 18 位數(shù)字,或者 17 位數(shù)字和最后一位。最后一位可以是數(shù)字或者是 X 或者是 x。
轉(zhuǎn)義字符
轉(zhuǎn)義字符用于匹配具有特殊意義的字符本身。在正則表達式中,可以使用反斜杠 \
來表示轉(zhuǎn)義字符。例如,\.
表示匹配句點字符。
分組
通過匹配身份證的例子,相信讀者已經(jīng)對小括號的作用有了一定的了解。小括號字符的第一個作用就是可以改變限定符的作用范圍,如 ‘|’、‘*’、‘^’ 等。例如下面的表達式中包含小括號。
(six|four)th
這個表達式的意思是匹配單詞 sixth 或 fourth,如果不使用小括號,那么就變成了匹配單詞 six 和 fourth 了。
小括號的第二個作用是分組,也就是子表達式。如 (.[0-9]{1,3}){3}
,就是對分組 (.[0-9]{1,3})
進行重復操作。
在Python中使用正則表達式語法
在 Python 中使用正則表達式時,是將其作為模式字符串使用的。例如,將匹配不是字母的一個字符的正則表達式表示為模式字符串,可以使用下面的代碼:
'[^a-zA-Z]'
而如果將匹配以字母 m 開頭的單詞的正則表達式轉(zhuǎn)換為模式字符串,則不能直接在其兩側(cè)添加引號定界符,例如,下面的代碼是不正確的。
'\bm\W*\b'
而是需要將其中的 “\” 進行轉(zhuǎn)義,即在模式字串前加 r 或 R。使用的代碼改寫為:
r'\bm\W*\b'
使用re模塊實現(xiàn)正則表達式操作
Python 提供了 re 模塊,用于實現(xiàn)正則表達式的操作。在實現(xiàn)時,可以使用 re 模塊提供的方法(例如,match()
、search()
、findall()
等)進行字符串處理。
匹配字符串
匹配字符串可以使用 re 模塊提供的 match()
、search()
、findall()
等方法。例如:
import re # re 模塊在使用時,需要先應用 import 語句引入
# match 方法用于從字符串的開始處進行匹配,如果在起始位置匹配成功,則返回 match 對象,否則返回 None
pattern = r'mr_\w+' # 模式字符串
string = 'MR_SHOP mr_shop' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不區(qū)分大小寫
print(match)
print('匹配值得起始位置:',match.start())
print('匹配值得結(jié)束位置:',match.end())
print('匹配位置的元組:',match.span())
print('要匹配的字符串:',match.string)
print('匹配數(shù)據(jù):',match.group())
# search 方法用于在整個字符串中搜索第一個匹配的值,如果匹配成功,則返回 match 對象,否則返回 None
match = re.search(pattern,string,re.I)
print(match)
# findall 方法用于在整個字符串中搜索所有符合正則表達式的字符串,并以列表的形式返回。若匹配成功,則返回包含匹配結(jié)構(gòu)的列表,否則返回空列表
match = re.findall(pattern,string,re.I)
print(match)
輸出結(jié)果為:
<re.Match object; span=(0, 7), match='MR_SHOP'>
匹配值得起始位置: 0
匹配值得結(jié)束位置: 7
匹配位置的元組: (0, 7)
要匹配的字符串: MR_SHOP mr_shop
匹配數(shù)據(jù): MR_SHOP
<re.Match object; span=(0, 7), match='MR_SHOP'>
['MR_SHOP', 'mr_shop']
替換字符串
使用 re 模塊的 sub()
函數(shù)可以替換字符串中匹配某個正則表達式模式的部分。例如:
import re
pattern = r'1[34578]\d{9}' # 定義要替換的模式字符串
string = '中獎號碼為:86888888 聯(lián)系電話為 13111111111'
result = re.sub(pattern,'1XXXXXXXXXXX',string)
print(result)
輸出結(jié)果為:
中獎號碼為:86888888 聯(lián)系電話為 1XXXXXXXXXXX
使用正則表達式分割字符串
split()
方法用于實現(xiàn)根據(jù)正則表達式分割字符串,并以列表的形式返回,其作用與字符串對象的 split()
方法類似,所不同的就是分割字符由模式字符串指定。例如:
import re
pattern = r'[>|/]' # 定義分隔符
ur1 = '機 電 研 究 生 >>> blog.csdn.net/a2360051431'
result = re.split(pattern,ur1) # 其作用與字符串對象的 spilt 方法類型,所不同的就是分割字符由模式字符串指定
print(result)
輸出結(jié)果為:
['機 電 研 究 生 ', '', '', ' blog.csdn.net', 'a2360051431']
結(jié)語
本篇博客我們學習了字符串的常用操作,包括拼接字符串、計算字符串的長度、截取字符串、分割字符串、檢索字符串、字母的大小寫轉(zhuǎn)換、去除字符串中的空格和特殊字符、格式化字符串。我們還介紹了正則表達式的基礎知識,包括行定位符、元字符、限定符、字符類、排除字符、選擇字符、轉(zhuǎn)義字符和分組。最后,我們學習了如何使用 re 模塊在 Python 中實現(xiàn)正則表達式的操作,包括匹配字符串、替換字符串和分割字符串。文章來源:http://www.zghlxwxcb.cn/news/detail-547994.html
掌握了字符串和正則表達式的基礎知識,你將能夠更加靈活和高效地處理和操作字符串數(shù)據(jù)。希望本篇博客對你學習 Python 有所幫助!文章來源地址http://www.zghlxwxcb.cn/news/detail-547994.html
到了這里,關(guān)于Python零基礎入門(六)——超詳細的字符串與正則表達式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!