Day19課後有感

2022-10-09 07:18:11 字數 2882 閱讀 1814

什麼是正規表示式?

正規表示式是獨立的一門語言,利用一些『特殊符號』的組合來篩選、匹配、校驗所需的資料,在python中我們借助re模組來使用正規表示式的功能。

字元組

'''單個字元組預設一次只匹配乙個字元'''
[0123456789]		                匹配0到9之間的任意乙個數字

[0-9] 匹配0到9之間的任意乙個數字(簡寫)

[a-z] 匹配a到z之間的任意乙個小寫字母

[a-z] 匹配a到z之間的任意乙個大寫字母

[0-9a-za-z] 匹配任意乙個數字或者大小寫字母(沒有順序)

特殊符號

'''單個特殊符號預設一次只匹配乙個字元'''
.							匹配除換行符以外的任意字元

\w 匹配數字、字母、下劃線(後續篩選變數名可能用到)

\w							匹配非字母或數字或下劃線
\d 匹配任意的數字
\d							匹配非數字

\t 匹配乙個製表符(tab鍵)

^ 匹配字串的開始

eg:^9 找9並且這個9必須在開頭

$                         匹配字串的結尾

eg:9$ 找9並且這個9必須在末尾

a|b 匹配a或者b 管道符就是or(或)的意思

() 給正規表示式分組 不影響正則匹配(後續再講)

字元組的概念(裡面所有的資料都是或的關係)

[^] 上箭號出現在了中括號的裡面意思是取反操作

量詞"""量詞必須跟在表示式的後面 不能單獨使用 目的是增加匹配的字元數"""

*								重複零次或者多次(預設就是多次:越多越好)

+ 重複一次或者多次(預設就是多次:越多越好)

? 重複零次或者一次(預設就是一次:越多越好)

重複n次

重複最少n次最多多次(越多越好)

重複n到m次(越多越好)

正則的編寫(複雜版)

# 校驗使用者身份證號碼

身份證號碼是乙個長度為15或18個字元的字串,如果是15位則全部由數字組成,首位不能為0;如果是18位,則前17位全部是數字,末位可能是數字或x

^[1-9][0-9] # 第一位 1到9開頭 後面0到9重複14次 組成15位的一串數字

^[1-9][0-9][0-9x] # 第一位1-9開頭 0-9重複16次 最後一位可以是0-9或者x

# 校驗郵箱、快遞單號、座機號...

取消轉義

\n				\n	 false  # 斜槓加字母有特殊含義

\\n \n true # 加斜槓取消特殊含義

\\\\n     \\n     true # 雙斜槓用來取消雙斜槓加字母的特殊含義

在python中還可以在字串的前面加r取消轉義 更加方便

貪婪匹配和非貪婪匹配

貪婪非貪婪通常都是利用左右兩邊的條件作為篩選依據

# 正則			# 待匹配的文字	        # 結果

<.*> alert(123)1條 貪婪匹配

以最後乙個大括號的出現作為結束標誌

<.*?> alert(123)2條 非貪婪匹配

以第乙個大括號的出現作為結束標誌

量詞預設都是貪婪匹配 如果想修改為非貪婪匹配 只需要在量詞的後面加?即可

re模組

import re

res = re.findall('a', 'jason oscar aaa') # findall(正規表示式,待匹配的文字)

print(res) # ['a', 'a', 'a', 'a', 'a'] # 結果是所有符合條件的資料 並且組織成了列表

res1 = re.search('a', 'jason oscar aaa') # search(正規表示式,待匹配的文字)

print(res1) # 查詢到乙個符合條件的資料就結束 沒有則返回none

print(res1.group()) # a 沒有則無法呼叫group() 直接報錯

res2 = re.match('j', 'jason oscar aaa') # match(正規表示式,待匹配的文字)

print(res2) # none 從字串的開頭匹配 如果沒有則直接返回none 類似於給正則自動加了^ 如果符合也只獲取乙個就結束

print(res2.group()) # j 沒有則無法呼叫group() 直接報錯

res3 = re.finditer('a', 'jason oscar aaa') # finditer(正規表示式,待匹配的文字)

print(res3) # 結果是乙個迭代器物件 為了節省空間

print([obj.group() for obj in res3]) # ['a', 'a', 'a', 'a', 'a']

obj = re.compile('\d+') # 提前寫好後續需要經常使用的正則

print(re.findall(obj,'asjd21hj13123j')) # 寫一遍之後 直接反覆呼叫即可

print(re.findall(obj,'234328748hgjghj')) # 寫一遍之後 直接反覆呼叫即可

print(re.findall(obj,'jhjhjh423432423')) # 寫一遍之後 直接反覆呼叫即可

Day03課後有感

python多版本共存 在cmd視窗中 兩個版本找到檔案內的 python.exe 分別在所在資料夾內進行拷貝 分別重新命名為python2 和 python3 在計算機的環境變數中新增並上移 在cmd中進行測試能否執行 注意事項 修改環境變數之後 原先開啟的cmd視窗無法直接使用,關閉重新開啟即可...

day06課後有感

todo 寫任何業務 都應該先搭建主體功能 之後再考慮配套優化 當while沒有被關鍵字break主動結束的情況下 正常結束迴圈體 之後會執行else的子 while 條件 迴圈體 else 迴圈體 正常執行結束 則會執行該子 塊 就是無限迴圈 永遠結束不了 死迴圈有時候會極度的影響電腦的效能 甚至...

每日演算法 day 19

那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.2 先將十六進製制轉化為二進位制 二進位制每四位可以表示乙個十六進製制的數字 ...