python全棧學習--day31(正則)
阿新 • • 發佈:2018-04-28
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/
這個是最好的正則表達式工具 正則可以隨時匹配 缺點: 如果只會用這個工具,而不會自己寫的話。就不行了。主要是自己寫,不要太依賴它。 字符組 字符串用[]表示 它只能匹配一個字符串
那麽在之後我們更多要考慮的是在同一個位置上可以出現的字符的範圍。[9-0] 是不可以的,為啥? 它比較的是ascii碼 [5-9] 這種是可以的 [5.5-9] 這種是不可以的 不允許輸出小數點 匹配3位數字
字符組 : [字符組]
在同一個位置可能出現的各種字符組成了一個字符組,在正則表達式中用[]表示
字符分為很多類,比如數字、字母、標點等等。
假如你現在要求一個位置"只能出現一個數字",那麽這個位置上的字符只能是0、1、2...9這10個數之一。
匹配大寫
大小寫匹配
[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(正則)