寫在前面
正則表達式汤求,又稱規(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保姆級教程虽画。
往期回顧