筆記 python基礎之模組 正規表示式re

2021-09-07 23:29:02 字數 4621 閱讀 7199

re模組

正規表示式 —— 字串匹配的

舉例:判斷一串數字是否是手機號。

未使用正規表示式:

while true:

phone_number = input('please input your phone number : ')

if len(phone_number) == 11 \

and phone_number.isdigit()\

and (phone_number.startswith('13') \

or phone_number.startswith('14') \

or phone_number.startswith('15') \

or phone_number.startswith('18')):

print('是合法的手機號碼')

else:

print('不是合法的手機號碼')

使用正規表示式:

import re

phone_number = input('please input your phone number : ')

if re.match('^(13|14|15|18)[0-9]$',phone_number):

print('是合法的手機號碼')

else:

print('不是合法的手機號碼')

re模組的方法:findall,search,match,split,sub,subn,finditer

findall:

返回所有滿足匹配條件的結果,放在列表裡

ret = re.findall('[a-z]+', 'eva egon yuan')

print(ret)

search:

從前往後,找到乙個就返回,返回的變數需要呼叫group才能拿到結果

如果沒有找到,那麼返回none,呼叫group會報錯

ret = re.search('a', 'eva egon yuan')

if ret:

print(ret.group())

match:

match是從頭開始匹配,如果正則規則從頭開始可以匹配上,就返回乙個變數。

匹配的內容需要用group才能顯示

如果沒匹配上,就返回none,呼叫group會報錯

ret = re.match('[a-z]+', 'eva egon yuan')

if ret:

print(ret.group())

split:分割

ret = re.split('[ab]', 'abcd')

# 先按'a'分割得到''和'bcd',在對''和'bcd'分別按'b'分割

print(ret) →輸出:['', '', 'cd']

sub:替換

ret = re.sub('\d', 'h', 'eva3egon4yuan4',1)

#將數字替換成'h',引數1表示只替換1個

print(ret) #evahegon4yuan4

subn:返回元組(替換的結果,替換了多少次)

ret = re.subn('\d', 'h', 'eva3egon4yuan4')

#將數字替換成'h'

print(ret)→輸出:('evahegonhyuanh', 3)

**compile:**將正規表示式編譯成為乙個 正規表示式物件

obj = re.compile('\d')

#將正規表示式編譯成為乙個 正規表示式物件,規則要匹配的是3個數字

ret = obj.search('abc123eeee') #正規表示式物件呼叫search,引數為待匹配的字串

print(ret.group())→輸出: 123

ret = obj.search('abcashgjgsdghkash456eeee3wr2')

#正規表示式物件呼叫search,引數為待匹配的字串

print(ret.group()) →輸出: 456

finditer:返回乙個存放匹配結果的迭代器

ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回乙個存放匹配結果的迭代器

print(ret) →輸出:# print(next(ret).group()) #檢視第乙個結果

# print(next(ret).group()) #檢視第二個結果

# print([i.group() for i in ret]) #檢視剩餘的左右結果

for i in ret:

print(i.group())

#輸出:34

784

正規表示式:能根據字串給出正規表示式的**:tool.china2.com/regex/

import re

ret = re.search('^[1-9](\d)(\d[0-9x])?$','110105199912122277')

print(ret.group())

print(ret.group(1))

print(ret.group(2))

#輸出:

print(ret) →輸出: ['oldboy']

#這是因為findall會優先把匹配結果組裡內容返回,如果想要匹配結果,取消許可權即可

print(ret) →輸出: ['eva', 'egon', 'yuan']

ret=re.split("(\d+)","eva3egon4yuan")

print(ret) →輸出: ['eva', '3', 'egon', '4', 'yuan']

各種字元與含義:書本《正則指引》

元字元符號

含義.除了換行符以外的任意字串,如str.→str+後一字元

\w字母、數字、下劃線

\s任意空白符

\d數字,[\d]+:多個多位數字的匹配,不會乙個乙個匹配

\w非字母、數字、下劃線

\d非數字

\s非空白符

\n乙個換行符

\t製表符(tab)

\b匹配單詞結尾,配合『.』 一起使用

^匹配以……開頭,如^e:以e開頭的

$匹配字串的結尾,一定寫在最後

a/b含a或b ,abc/ab:先匹配abc在匹配ab,注意順序

()分組,要對組合的字元進行匹配時

[…]匹配字元組中的字元

[^…]

匹配除了字元組中字元的所有字元(非),寫在開頭

量詞(放後面):量詞僅約束緊跟著的前乙個字元

符號含義*+

重複一次或者更多次

?重複零次或一次,乙個乙個匹配 ,可將貪婪轉為非貪婪,也叫惰性匹配,放在分組(?…)中取消分組優先

重複n次

重複n次或者更多次

重複n到m次

字元組

在同一位置可能出現的各種字元組成了乙個字元組,在正規表示式中用表示。

符號含義

[0123456789]/[0-9]

數字,字元組裡的資料

[a-z]

小寫字母

[a-z]

大寫字母

[0-9 a-f a-f]

可以匹配數字,大小寫姓氏a-f,用來驗證十六進製制字元

轉義符符號

含義r』\n』

r能取消\的轉義

貪婪匹配符號

含義<.*>

貪婪:先匹配所有,再匹配結尾的『>』

<.*?>

非貪婪:一直匹配,如有『>』就結束

*?重複任意次,但盡可能少重複

+?重複1次或更多次,但盡可能少重複

??重複0次或者1次,但盡可能少重複

?重複n到m次,但盡可能少重複

?重複n次以上,但盡可能少重複

.*?取盡量少的任意字元,如.*?x:匹配x之前一直匹配

python基礎之模組之sys模組

sys模組的功能 sys是python中較為常用的乙個模組,他提供了對python指令碼執行時的環境的操作。sys功能 1 sys.argv 將python指令碼執行時的指令碼名以及引數作為乙個list,並輸出。2 sys.path 返回乙個list,該list為當前指令碼的path環境變數 pyt...

python常用模組之re模組(正則)

python種的re模組常用的5種方法,分別是re.match re.search re.findall re.split re.sub。在介紹五種方法之前,需要介紹一下正則的基礎。表示任意字元,除 n以為 轉義字元 字符集,表示取其中任意乙個字元。比如 abc d 可以匹配到ad bd cd。d ...

python常用模組之 正則re模組

python中使用正規表示式的步驟 1.匯入re模組 import re 2.初始化乙個regex物件 re.compile 3.剛剛建立的regex物件呼叫search方法進行匹配,返回要給march物件 4.剛剛的march物件呼叫group方法,展示匹配到的字串 下面例子的知識點 對正規表示式...