Python中的正則表達式

寫在前面

正則表達式汤求,又稱規(guī)則表達式帮辟,可用單個字符串來描述、匹配某個句法規(guī)則的字符串辕棚,常被用來檢索、替換哪些符合某個模式的文本(不理解匹配規(guī)則的同學可以參考:正則表達式)。Python中的正則表達式可通過re模塊中的match坟募、search岛蚤、findall三個方法來實現

-re.match(匹配規(guī)則, 被匹配字符串)
匹配成功則返回匹配對象,匹配不成功則返回空懈糯。re.match默認從頭部匹配涤妒,若頭部不匹配,則后面的內容不參與匹配

  • re.search
    檢索整個字符串赚哗,找出匹配的她紫,匹配一次后即停止檢索。

  • re.findall
    檢索整個字符串屿储,并返回所有匹配結果(值的list)

一贿讹、簡單演示

# re.match

# 默認從頭部匹配,若頭部不匹配够掠,則后面的內容不參與匹配
import re
match_res = re.match('Biomamba','I am Biomamba')
print(match_res)
# 可以看出雖然我們后面的話中包含"Biomamba"民褂,但是結果并沒有返回。
## None
# 我們把單詞的順序換一下
match_res = re.match('Biomamba','Biomamba is me')
print(match_res)
# 可以看到返回了字符串對應的坐標
## <_sre.SRE_Match object; span=(0, 8), match='Biomamba'>
# match_res中的信息可以被分別取出:
print(match_res.span())
## (0, 8)
print(match_res.start())
## 0
print(match_res.end())
## 8
# re.search 
# 檢索整個字符串疯潭,找出匹配的赊堪,匹配一次后即停止檢索
import re
search_res = re.search('Biomamba','I am Biomamba. Biomamba is me.')
print(search_res)
# 可以看出只返回了第一個"Biomamba"的坐標。
## <_sre.SRE_Match object; span=(5, 13), match='Biomamba'>
# re.findall
# 檢索整個字符串竖哩,并返回所有匹配結果(值的list)
import re
findall_res = re.findall('Biomamba','I am Biomamba. Biomamba is me.')
print(findall_res)
# 可以看出返回了所有值
## ['Biomamba', 'Biomamba']
print(type(findall_res))
# 返回的對象是一個list
## <class 'list'>

二哭廉、元字符

元字符指一類具有特定功能,用于匹配特定字符串的字符相叁。

18.2.1 字符匹配

  • .
    匹配任意1個字符遵绰,除了換行符\n和.本身\.

  • []
    匹配[]中列舉的字符

  • br> 匹配數字字符兼犯,即0-9

  • 匹配非數字的字符

  • 匹配空白从诲,包括空格大审、tab鍵

  • 匹配非空白

  • 匹配單詞字符人断,即a-z、A-Z维咸、0-9、_

# 簡單的舉幾個例子:
import re
my_word = 'I am Biomamba.This year is 2023 . Biomamba is me.'
# 找出這句話中所有的數字
re.findall('[0-9]',my_word) 
# 可見匹配到的所有數字被列出:
## ['2', '0', '2', '3']
# 或者我們換個寫法依舊可以匹配到所有的數字
import re
my_word = 'I am Biomamba.This year is 2023 . Biomamba is me.'
# 找出這句話中所有的數字
re.findall('\d',my_word) 
# 可見匹配到的所有數字被列出:
## ['2', '0', '2', '3']
# 找出所有的大寫字母
import re
my_word = 'I am Biomamba.This year is 2023 . Biomamba is me.'

re.findall('[A-Z]',my_word) 
# 可見匹配到的所有的大寫字母被列出:
## ['I', 'B', 'T', 'B']
# 找出所有字母
import re
my_word = 'I am Biomamba.This year is 2023 . Biomamba is me.'

re.findall('[A-z]',my_word) 
# 可見匹配到的所有字母被列出:
## ['I', 'a', 'm', 'B', 'i', 'o', 'm', 'a', 'm', 'b', 'a', 'T', 'h', 'i', 's', 'y', 'e', 'a', 'r', 'i', 's', 'B', 'i', 'o', 'm', 'a', 'm', 'b', 'a', 'i', 's', 'm', 'e']
# 找出所有空格及其前面的一個字符
my_word = 'I am Biomamba.This year is 2023 . Biomamba is me.'

re.findall('.\s',my_word)
## ['I ', 'm ', 's ', 'r ', 's ', '3 ', '. ', 'a ', 's ']
# 找出所有空格及其前面的一個字符
my_word = 'I am Biomamba.This year is 2023 . Biomamba is me.'

re.findall('.\s',my_word)
## ['I ', 'm ', 's ', 'r ', 's ', '3 ', '. ', 'a ', 's ']
# 匹配任意字符任意次
re.findall('.*',my_word) 
# 可以看到完整的內容被匹配與打出
## ['I am Biomamba.This year is 2023 . Biomamba is me.', '']

18.2.2 數量匹配:

    匹配前一個規(guī)則的字符任意次(0次至無數次)

    匹配前一個規(guī)則的字符1至無數次

  • ?
    匹配前一個規(guī)則的字符0次或1次

  • {m}
    匹配前一個規(guī)則的字符m次

  • {m,}
    匹配前一個字符最少m次

  • {m,n}
    匹配前一個字符m到n次

import re
my_word = 'I am Biomamba.BBBiomamba. iomamba.This year is 2023 . Biomamba is me.'

# 匹配B字符任意次及后接iomamba字符
re.findall('B*iomamba',my_word)
# 可以看出 Biomamba 、iomamba 和 BBBiomamba 均可以被打印出
## ['Biomamba', 'BBBiomamba', 'iomamba', 'Biomamba']
# 匹配B字符一次及后接iomamba字符
re.findall('B+iomamba',my_word)
# 可以看出iomamba無法被打印出
## ['Biomamba', 'BBBiomamba', 'Biomamba']
# 匹配最少三次B后接iomamba
my_word = 'I am Biomamba. BBiomamba.BBBiomamba. BBBBiomamba .iomamba.This year is 2023 . Biomamba is me.'
re.findall('B{3,}iomamba',my_word)
# 可以看到只有三個及以上的B被輸出
## ['BBBiomamba', 'BBBBiomamba']
# 匹配二至三次B后接iomamba
re.findall('B{2,3}iomamba',my_word)
## ['BBiomamba', 'BBBiomamba', 'BBBiomamba']

18.2.3 邊界匹配

  • ^
    匹配字符串開頭

  • $
    匹配字符串結尾

  • br> 匹配一個單詞的邊界

  • 匹配一個非單詞的邊界

import re
my_word = 'I am Biomamba.This year is 2023 . Biomamba is me.'

# 匹配字符串開頭和之后的一個字符
re.findall('^.',my_word)
## ['I']
# 匹配字符串結尾和之前的兩個字符
re.findall('.{2}$',my_word)
## ['e.']
# 匹配字符串中單詞非邊界前為a的單詞
re.findall('a\B',my_word)
## ['a', 'a', 'a', 'a']

其它匹配依次類推端辱,正則表達式在所有平臺與語言中幾乎都是通用的,詳情可見我們的Linux課程生信小白的Linux保姆級教程虽画。

往期回顧

生信Python速查手冊

Python安裝(Windows+Linux)

Python的"Rstudio"——Pycharm

碼Python神器:jupyter notebook

一文了解Python基礎:字面量舞蔽、注釋、變量码撰、類型渗柿、運算符

Python判斷語句

Python循環(huán)語句

Python函數與方法

一文掌握Python數據容器

Python函數進階

Python文件操作

Python異常

Python模塊

Python包的創(chuàng)建、導入、安裝

Python數據可視化案例:pyecharts

Python類與對象

Python多線程編程

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末朵栖,一起剝皮案震驚了整個濱河市颊亮,隨后出現的幾起案子,更是在濱河造成了極大的恐慌陨溅,老刑警劉巖终惑,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異门扇,居然都是意外死亡雹有,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門臼寄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霸奕,“玉大人,你說我怎么就攤上這事吉拳≈仕В” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵留攒,是天一觀的道長临梗。 經常有香客問我,道長稼跳,這世上最難降的妖魔是什么盟庞? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮汤善,結果婚禮上什猖,老公的妹妹穿的比我還像新娘。我一直安慰自己红淡,他們只是感情好不狮,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著在旱,像睡著了一般摇零。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桶蝎,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天驻仅,我揣著相機與錄音,去河邊找鬼登渣。 笑死噪服,一個胖子當著我的面吹牛,可吹牛的內容都是我干的胜茧。 我是一名探鬼主播粘优,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雹顺?” 一聲冷哼從身側響起丹墨,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嬉愧,沒想到半個月后带到,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡英染,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年揽惹,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片四康。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡搪搏,死狀恐怖,靈堂內的尸體忽然破棺而出闪金,到底是詐尸還是另有隱情疯溺,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布哎垦,位于F島的核電站囱嫩,受9級特大地震影響,放射性物質發(fā)生泄漏漏设。R本人自食惡果不足惜墨闲,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望郑口。 院中可真熱鬧鸳碧,春花似錦、人聲如沸犬性。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乒裆。三九已至套利,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹤耍,已是汗流浹背肉迫。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惰蜜,地道東北人昂拂。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓受神,卻偏偏與公主長得像抛猖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容