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方法,展示匹配到的字串 下面例子的知識點 對正規表示式...