正則表達式_月隱學python第20課

目錄

1.爲什麼使⽤正則表達式

2.正則表達式的組成

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()

3.7  compile

4.練習


正則表達式


正則表達式是對字符串操作的⼀種邏輯公式,就是⽤事先定義好的⼀些特定字符、及這些特定字符的組合,組成⼀個“規則字符串”,這個“規則字符串”⽤來表達對字符串的⼀種過濾邏輯。

  • 需要引⼊內置模塊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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章