Python語法學(xué)習(xí)之正則表達(dá)式的使用詳解
要想成功的進(jìn)行字符串的匹配需要使用到正則表達(dá)式模塊,正則表達(dá)式匹配規(guī)則以及需要被匹配的字符串。在這三個條件中,模塊與字符串都是準(zhǔn)備好的,只有匹配規(guī)則異常的靈活,而今天這個章節(jié)就是認(rèn)識一下正則表達(dá)式中的特殊字符,通過這些字符就可以針對我們想要的數(shù)據(jù)進(jìn)行匹配。
正則表達(dá)式中的特殊字符
特殊字符 | 描述 |
---|---|
\d | 匹配任何十進(jìn)制的數(shù)字,與[0-9]一致 |
\D | 匹配任意非數(shù)字 |
\w | 匹配任何字母數(shù)字下劃線及unicode字符集 |
\W | 匹配非字母數(shù)字的數(shù)據(jù)以及下劃線 |
\s | 匹配任何空格字符,與 [\n \t \r \v \f] 相同 |
\S | 匹配任意非空字符 |
\A | 匹配字符串的起始 |
\Z | 匹配字符串的結(jié)束 |
. | 匹配任何字符(除了 \n 之外);也叫做通配符 |
正則表達(dá)式的使用
接下來看一個小案例,幫助我們了解這些 特殊字符的使用方法 。
import re test_data = "My name is Neo, I'm 30 years old." # 將一串字符串賦值給變量 test_data result_int = re.findall('\d', test_data) # 使用 findall 函數(shù)并傳入 '\d' 的匹配規(guī)則匹配 test_data(只匹配數(shù)字) result_Space = re.findall('\s', test_data) # 使用 findall 函數(shù)并傳入 '\d' 的匹配規(guī)則匹配 test_data(只匹配空格) result_str = re.findall('\w', test_data) # 使用 findall 函數(shù)并傳入 '\d' 的匹配規(guī)則匹配 test_data(匹配字符串) result_str_start = re.findall('\AMy', test_data) # 匹配開頭為 My 的字符串 result_str_start_null = re.findall('\AMya', test_data) # 匹配開頭為 Mya 的字符串(不存在 mya ,返回空列表) result_str_end = re.findall('old.\Z', test_data) # 匹配結(jié)尾為 old. 的字符串 result_str_end_null = re.findall('zold.\Z', test_data) # 匹配結(jié)尾為 zold. 的字符串(不存在 zold ,返回空列表) result_all = re.findall('.', test_data) # 匹配除了 \n 之外的所有字符(包含空格) print(result_int) print(result_Space) print(result_str) # 從結(jié)果上來看 \w 要比 \d 更高級一些,不僅匹配了 str,也匹配了 int(實(shí)際上這里的int依然是字符串) print(result_str_start) print(result_str_start_null) print(result_str_end) print(result_str_end_null) # >>> 執(zhí)行結(jié)果如下 # >>> ['3', '0'] # >>> [' ', ' ', ' ', ' ', ' ', ' ', ' '] # >>> ['M', 'y', 'n', 'a', 'm', 'e', 'i', 's', 'N', 'e', 'o', 'I', 'm', '3', '0', 'y', 'e', 'a', 'r', 's', 'o', 'l', 'd'] # >>> ['My'] # >>> [] # >>> ['old.'] # >>> [] # >>> ['M', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'N', 'e', 'o', ',', ' ', 'I', "'", 'm', ' ', '3', '0', ' ', 'y', 'e', 'a', 'r', 's', ' ', 'o', 'l', 'd', '.']
正則小案例 - 1
1、定義一個函數(shù),判斷傳入?yún)?shù)是否包含有數(shù)字。
2、定義一個函數(shù),判斷傳入?yún)?shù)是否含有數(shù)字,如果有則移除。
import re def have_number(data): # 定義一個判斷是否存在數(shù)字的函數(shù) result = re.findall('\d', data) # 利用 re 模塊的 findall 函數(shù)的 \d 規(guī)則判斷傳入的 data 是否存在數(shù)字 print(result) for i in result: # 利用 for 循環(huán) 判斷 result 的結(jié)果,如果存在返回 True ;反之返回 False return True return False def remove_number(data): result = re.findall('\D', data) print(result) return ' '.join(result) if __name__ == '__main__': test_data_1 = "My name is Neo, I'm 30 year's old." test_data_2 = "it's a beautiful day to be with you" result = have_number(test_data_1) print(result) result = remove_number(test_data_1) print(result) result = re.findall('\W', test_data_2) # 匹配非字母數(shù)字的數(shù)據(jù)以及下劃線 print(result)
運(yùn)行結(jié)果如下圖:
正則小案例 - 2
1、定義一個 startwith 函數(shù) 判斷傳入數(shù)據(jù)是否是字符串的開頭
2、定義一個 endwith 函數(shù) 判斷傳入數(shù)據(jù)是否是字符串的結(jié)尾
import re def startswith(sub, data): _sub = '\A{}'.format(sub) result = re.findall(_sub, data) for i in result: return True return False def endswith(sub, data): _sub = '{}\Z'.format(sub) result = re.findall(_sub, data) if len(result) == 0: return False else: return True if __name__ == '__main__': result = startswith('My', test_data_1) print(result) result = endswith('old.', test_data_2) print(result)
執(zhí)行結(jié)果如下:
正則小案例 - 3
1、python 內(nèi)置函數(shù) len() 是可以獲取到字符串的長度的,但是當(dāng)字符串中存在著空格符號的時候也會計(jì)算在長度內(nèi)。
2、利用正則的知識,定義一個計(jì)算字符串真實(shí)長度的函數(shù)
import re def real_len(data): result = re.findall('\S', data) return len(result) if __name__ == '__main__': test_data_1 = "My name is Neo, I'm 30 year's old." test_data_2 = "it's a beautiful day to be with you" print(len(test_data_2)) result = real_len(test_data_2) print(result)
運(yùn)行結(jié)果如下:
以上就是Python語法學(xué)習(xí)之正則表達(dá)式的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Python正則表達(dá)式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一小時學(xué)會TensorFlow2之基本操作2實(shí)例代碼
這篇文章主要介紹了TensorFlow2的基本操作和實(shí)例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09python爬蟲學(xué)習(xí)筆記之Beautifulsoup模塊用法詳解
這篇文章主要介紹了python爬蟲學(xué)習(xí)筆記之Beautifulsoup模塊用法,結(jié)合實(shí)例形式詳細(xì)分析了python爬蟲Beautifulsoup模塊基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04Django城市信息查詢功能的實(shí)現(xiàn)步驟
Django中的查詢操作是數(shù)據(jù)庫操作中一個非常重要的技術(shù),下面這篇文章主要給大家介紹了關(guān)于Django城市信息查詢功能的實(shí)現(xiàn)步驟,文中通過實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07python wxpython 實(shí)現(xiàn)界面跳轉(zhuǎn)功能
wxpython沒提供界面跳轉(zhuǎn)的方式,所以就需要借助threading模塊,本文給大家分享python wxpython 實(shí)現(xiàn)界面跳轉(zhuǎn)功能,感興趣的朋友跟隨小編一起看看吧2019-12-12python神經(jīng)網(wǎng)絡(luò)tf.name_scope和tf.variable_scope函數(shù)區(qū)別
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)tf.name_scope和tf.variable_scope函數(shù)的使用區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python+OpenCV繪制多instance的Mask圖像
Mask圖像中,不同值表示不同的實(shí)例(instance)。本文將詳細(xì)為大家講講如何利用OpenCV繪制多instance的Mask圖像,感興趣的可以學(xué)習(xí)一下2022-06-06django 自定義filter 判斷if var in list的例子
今天小編就為大家分享一篇django 自定義filter 判斷if var in list的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲詳解
這篇文章主要介紹了Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲詳解,在Python中有時候需要操作excel表格的數(shù)據(jù),把excel表格轉(zhuǎn)化為字典存起來,方便讀取,今天我們就來看看如何轉(zhuǎn)換,需要的朋友可以參考下2023-08-08