1. 程式人生 > >正則表示式(re模組)

正則表示式(re模組)

正則表示式,用來處理什麼的呢?它有什麼作用?

正則表示式是用來處理字串匹配的!

 

講正題之前我們先來看一個例子::https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/

這是京東的註冊頁面,開啟頁面我們就看到這些要求輸入個人資訊的提示。
假如我們隨意的在手機號碼這一欄輸入一個11111111111,它會提示我們格式有誤。
這個功能是怎麼實現的呢?

假如現在你用python寫一段程式碼,類似:

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

你怎麼判斷這個phone_number是合法的呢?

根據手機號碼一共11位並且是隻以13、14、15、18開頭的數字這些特點,我們用python寫了如下程式碼:
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('不是合法的手機號碼')

#以上是用Python語言實現的程式碼

判斷手機號碼是否合法2:

#判斷手機號合不合法2
import re #藉助正則模組
phone_number = input("Please input your phone number:")
if re.match("^(13|18|17|15)[0-9]{9}$
",phone_number): print("是合法的手機號碼!") else: print("輸入的手機號碼不合法!")

對比上面的兩種寫法,此時此刻,我要問你你喜歡哪種方法呀?你肯定還是會說第一種,為什麼呢?因為第一種不用學呀!
但是如果現在有一個檔案,我讓你從整個檔案裡匹配出所有的手機號碼。你用python給我寫個試試?
但是學了今天的技能之後,分分鐘幫你搞定!

今天我們要學習python裡的re模組和正則表示式,學會了這個就可以幫我們解決剛剛的疑問。正則表示式不僅在python領域,在整個程式設計屆都佔有舉足輕重的地位。

(正則的規則在處理字串上有非常大的優勢)

正則表示式本身也和python沒有什麼關係(在Python中使用正則表示式就是使用re模組),就是匹配字串內容的一種規則。官方定義:正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。

一說規則我已經知道你很暈了,現在就讓我們先來看一些實際的應用。線上測試工具 http://tool.chinaz.com/regex/首先你要知道的是,談到正則,就只和字串相關了。在我給你提供的工具中,你輸入的每一個字都是一個字串。

其次,如果在一個位置的一個值,不會出現什麼變化,那麼是不需要規則的。
  比如你要用"1"去匹配"1",或者用"2"去匹配"2",直接就可以匹配上。這連python的字串操作都可以輕鬆做到。
那麼在之後我們更多要考慮的是在同一個位置上可以出現的字元的範圍。
字元組 : [字元組]
在同一個位置可能出現的各種字元組成了一個字元組,在正則表示式中用[]表示,一箇中括號只能匹配一個字元。
字元分為很多類,比如數字、字母、標點等等。
假如你現在要求一個位置"只能出現一個數字",那麼這個位置上的字元只能是0、12...9這10個數之一。

PS: A:65  a:97(ASCII碼)

字元:

       "\n":匹配一個換行符        "\b":  匹配一個單詞的結尾           "\t": 匹配一個製表符

       "a|b":匹配字元a或字元b    "()":匹配括號內的表示式,也表示一個組