目錄
正則表達式
正則表達式是對字符串操作的⼀種邏輯公式,就是⽤事先定義好的⼀些特定字符、及這些特定字符的組合,組成⼀個“規則字符串”,這個“規則字符串”⽤來表達對字符串的⼀種過濾邏輯。
- 需要引⼊內置模塊re
- 缺點:效率低下,能⽤字符串⽅法完成儘量使⽤字符串的⽅法
- 優點:編碼簡單
1.爲什麼使⽤正則表達式
使⽤場景
- 敏感詞過濾
- ⼿機、郵箱等驗證
- 爬⾍
2.正則表達式的組成
- 原⼦ 組成正則表達式的最⼩單位,任何字符都可以
- 量詞 量詞能夠增強原⼦的描述能⼒
- 模式修正符
注意:
- 模式字符串⼀定要使⽤原⽣字符串,也就是⽤r開頭的字符串。 r'www'
- 嚴格區分⼤⼩寫
- 如果正則表達式中有{, }, [,],-,?,*,|^,$,.等做普通字符,則要將其轉義
3.正則常⽤⽅法
3.1 re.match()
3.2 re.search()
3.3 re.findall()
3.4 re.split
3.5 re.sub和re.subn
3.6 re.group()和re.groups()
⽤於提取⼦元素,模式中⼀個括號就是⼀個⼦元素, group和groups只能在match和search⽅法⾥使⽤,通過返回的match object獲取⼦元素。在模式串和sub和subn中的替換字符串中可以使⽤\1, \2, \3....來引⽤⼦元素
3.7 compile
當我們使⽤正則表達式時, re模塊會⼲兩件事
1、編譯正則表達式,如果正則表達式本身不合法,會報錯
2、⽤編譯後的正則表達式去匹配對象
編譯正則表達式使⽤compile
4.練習
⽤戶名匹配:由數字、⼤⼩寫字⺟、下劃線 _ 和中橫線 - 組成,⻓度爲4到14位,並且不能以數字開頭。
把下劃線命名(也叫蛇形命名,所有單詞都是⼩寫,中間通過下劃線連接),轉化爲⼩駝峯命名法(第⼀個單詞⼩寫,其餘所有單詞⾸字⺟⼤寫)。例如'go_to_next_page',轉化後改寫爲'goToNextPage'。要求:⽤正則表達式替換
匹配郵箱
匹配⼿機號
匹配身份證號。
匹配URL地址
匹配⽇期
匹配QQ號
匹配微信號
匹配⻋牌號
def user_name():
while 1:
name = input("請輸入用戶名:")
if len(name) > 3 and len(name) <15 :
re_name = re.compile(r'^[^\d]([0-9a-zA-Z])|(_-)')
if re_name.match(name) != None:
print("用戶名輸入成功:")
return name
else:
print("用戶名格式輸入錯誤")
print("用戶名:由數字、⼤⼩寫字⺟、下劃線 _ 和中橫線 - 組成,⻓度爲4到14位,並且不能以數字開頭。")
else:
print("用戶名格式輸入錯誤")
print("用戶名:由數字、⼤⼩寫字⺟、下劃線 _ 和中橫線 - 組成,⻓度爲4到14位,並且不能以數字開頭。")
user_name()
def min_name():
str1 = input('請輸入字符串:')
list1 = re.split(r'_',str1)
print(list1)
for i in range(1,len(list1)):
if list1[i][0].islower():
list1[i] = list1[i].title()
print(('').join(list1))
min_name()
def emil():
emil_name = input('請輸入郵箱:')
ret =re.match(r'[(@qq.com)(@126.com)(@163.com)]',emil_name)
print(ret)
if ret.span()[0] != 0:
print('郵箱正確')
else:
print('郵箱格式不對')
emil()
def phone():
phone_num = input("請輸入手機號:")
ret = re.match(r'^1(([3578]\d)|(47))\d{8}$',phone_num)
if ret != None:
print('是手機號')
else:
print('不是手機號')
phone()