1. 程式人生 > >python全棧學習--day31(正則)

python全棧學習--day31(正則)

print 9.png 轉義符 ber error val 斜杠 num src




try: ‘‘‘可能會出現異常的代碼‘‘‘ except ValueError: ‘‘‘‘打印一些提示或者處理的內容‘‘‘ except NameError: ‘‘‘...‘‘‘ except Exception: ‘‘‘萬能異常不能亂用‘‘‘

 

try:
    ‘‘‘可能會出現異常的代碼‘‘‘
except ValueError:
    ‘‘‘‘打印一些提示或者處理的內容‘‘‘
except NameError:
    ‘‘‘...‘‘‘
except Exception:
    ‘‘‘萬能異常不能亂用‘‘‘
else:
    ‘‘‘以上所有的except都不執行‘‘‘

  

try:
    ‘‘‘可能會出現異常的代碼‘‘‘
except ValueError:
    ‘‘‘打印一些提示或者處理的內容‘‘‘
else:
    ‘‘‘try中的代碼正常執行了‘‘‘
finally:
    ‘‘‘無論錯誤是否發生,都會執行這段代碼,用來做一些首尾工作‘‘‘

  

number = input(‘please input your phone number:‘)
if number.isdigit() and number.startswith(‘13‘)    or number.startswith(‘14‘)    or number.startswith(‘15‘)    or number.startswith(‘16‘)    or number.startswith(‘17‘)    or number.startswith(‘18‘)    or number.startswith(‘19‘):
    print(‘通過檢查‘)
else:
    print(‘格式錯誤‘)

上面的代碼太冗長了,使用正則
number = input(‘please input your phone number:‘)
ret = re.match(‘(13|14|15|16|17|18|19)[0-9]{9}‘,number)
if ret:print(‘通過初檢查‘)

實例一:

匹配出手機號碼,就可以使用正則了。

with open(‘a‘,encoding=‘utf-8‘)as f1:
    li = []
    for i in f1:
        i = i.strip()
        ret = re.findall(‘1[3-9]\d{9}‘,i)
        li.extend(ret)      #extend 合並
print(li)
正則表達式本身也和python沒有什麽關系,就是匹配字符串內容的一種規則。 官方定義:正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。

  正則表達式

在線測試工具 http://tool.chinaz.com/regex/

這個是最好的正則表達式工具 正則可以隨時匹配

技術分享圖片

缺點: 如果只會用這個工具,而不會自己寫的話。就不行了。主要是自己寫,不要太依賴它。 字符組 字符串用[]表示 它只能匹配一個字符串 技術分享圖片

技術分享圖片

那麽在之後我們更多要考慮的是在同一個位置上可以出現的字符的範圍。
字符組 : [字符組]
在同一個位置可能出現的各種字符組成了一個字符組,在正則表達式中用[]表示
字符分為很多類,比如數字、字母、標點等等。
假如你現在要求一個位置"只能出現一個數字",那麽這個位置上的字符只能是0、1、2...9這10個數之一。
技術分享圖片 [9-0] 是不可以的,為啥? 它比較的是ascii碼 [5-9] 這種是可以的 [5.5-9] 這種是不可以的 不允許輸出小數點 匹配3位數字 技術分享圖片

技術分享圖片

匹配大寫

技術分享圖片

大小寫匹配

技術分享圖片

[A-z] 這樣寫是不對的。ascii碼的大小寫不是連續的 它不能匹配特殊字符 [0-9a-fA-F] 表示匹配十六進制 總結: 技術分享圖片

技術分享圖片

技術分享圖片

.是萬能的,除了換行符以外

匹配空白

技術分享圖片

重點

^ 匹配字符串的開始
$ 匹配字符串的結尾

技術分享圖片

以海開頭

技術分享圖片

正則表達式,不能寫在後面

技術分享圖片

它只能出現在開始位置不能在中間或者後面位置

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

這種情況,是唯一ke可以放到任意位置的

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

表示匹配11位以上,不能低於11位

技術分享圖片

匹配15位,往多的匹配

技術分享圖片

技術分享圖片

*表示0次或者多次。 這裏匹配了0次,雖然沒匹配上。 技術分享圖片

匹配1次或者多次

技術分享圖片

?匹配一次或者0次 匹配不上,就是0次 技術分享圖片

重點:

量詞只能約束一個字符串

這裏的約束[A-Z]

技術分享圖片

同時約束[0-9]和[A-Z]

技術分享圖片

沒有匹配上,就是匹配0次 匹配0次 技術分享圖片

技術分享圖片

tool.chinaz.com/regex/ 這個工具,顯示的結果,可能跟真實的有區別 ?表示0次或多次 技術分享圖片 默認的正則是貪婪匹配 如果能匹配1次,絕不匹配0次 .* 表示匹配所有 技術分享圖片

技術分享圖片

技術分享圖片

非貪婪匹配,加一個?,就是非貪婪 在規則內,越少越好

技術分享圖片

最多2次

技術分享圖片

技術分享圖片

帶紅線,不是重要的

技術分享圖片

元字符,應該和量詞使用

分組 ()與 或 |[^] 身份證號碼是一個長度為15或18個字符的字符串,如果是15位則全部由數字組成,首位不能為0;如果是18位,則前17位全部是數字,末位可能是數字或x,下面我們嘗試用正則來表示: 技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

需求對二個約束

技術分享圖片

寫這樣寫不好

技術分享圖片

技術分享圖片

至少匹配15次

技術分享圖片

這樣寫,就比較專業

技術分享圖片

技術分享圖片

轉義符 \ 現在要匹配\n,斜杠需要轉義 技術分享圖片

2個下劃線就是轉義

技術分享圖片

技術分享圖片

貪婪匹配 貪婪匹配:在滿足匹配時,匹配盡可能長的字符串,默認情況下,采用貪婪匹配 技術分享圖片

結果就是一項

技術分享圖片

技術分享圖片

因為它要回到原來很難,所以它盡可能,多匹配一點 匹配多次,直到遇到<停下來 技術分享圖片

?先匹配後面的。

技術分享圖片

幾個常用的非貪婪匹配Pattern

匹配字符 說明
*? 重復任意次,但盡可能少重復
+? 重復1次或更多次,但盡可能少重復
?? 重復0次或1次,但盡可能少重復
{n,m}? 重復n到m次,但盡可能少重復
{n,}? 重復n次以上,但盡可能少重復

python全棧學習--day31(正則)