1. 程式人生 > 其它 >正則表示式(介紹)

正則表示式(介紹)

目錄

一.什麼是正則表示式
1.獨立的語言,專門用來匹配,效驗,篩查所需要的資料
2.記(內建模組re)任何語言都可以使用 python必須藉助內建模組re
3.正則表示式:利用了'特殊符號'組合,去字串中篩選出想要的資料

1.例題

手機號效驗
1.手機號通常(13.15.17.18.19)開頭組成
2.必須是11位的純數字
# 1.獲取使用者的手機號
phone_num = input('請輸入您的手機號>>>:').strip()
# 2.先校驗是否是11位
if len(phone_num) == 11:
    # 3.再校驗是否是純數字
    if phone_num.isdigit():
        # 4.校驗開頭是否合法
        if phone_num.startswith('13') or phone_num.startswith('15') or phone_num.startswith(
                '17') or phone_num.startswith('18'):
            print('是一個正常的手機號')
        else:
            print('手機號開頭不合法')
    else:
        print('手機號必須是純數字')
else:
    print('手機號必須是11位')

2.正則表示式

import re
# 呼叫模組re
phone_number = input('please input your phone number : ').strip()
# 使用者輸入手機號.去除首尾空格
if re.match('^(13|14|15|18)[0-9]{9}$', phone_number):
    # ()組合  內部字串
    # 判斷 ^判斷開頭是否是13.14.15.18 |或的意思
    # 判斷 [0-9]是否為0-9之間數字或者判斷是否為純數字
    # 判斷  {9} 13.14.15.18已經是兩位所以這是判斷是否為9位數
    # 判斷 $ 結尾(任意9個數結尾)
    print('正確手機號碼')
else:
    print('錯誤手機號碼')
"""在匹配篩選查詢資料的時候可以使用正則提供的符號也可以直接寫目標資料"""

二.正則表示式之字元組

線上測試網站:http://tool.chinaz.com/regex/
"""單字元組預設只能匹配一個字元"""

1.簡寫字‘符’

1.[012345689]  匹配0到9中間任意一個數
2.[0-9]        匹配0到9中間任意一個數
3.[a-z]        匹配a到z中間任意一個數  
4.[A-Z]        匹配A到Z中間任意一個數
5.[0-9A-Za-z]  匹配任意數字大小寫中間任意一個數

2.特殊符號

1.'.'         匹配除了換行符以外的任意一個數
2.'\w'        匹配字母.數字.下滑線之內的任意一個數
3.'\d'        匹配任意的數字(是數字都要)
4.'\t'        匹配一個製表符(TAB鍵盤)
5.'^'         匹配字串開始  '2' ^2 2必須在開頭
6.'$'         匹配字串結尾  '2' 2$ 2必須在末尾
7.'\W'        匹配非字母.數字.下滑線任意一個數
8.'\D'        匹配非數字 (是數字都不要)
9.'|'         |管道符  or(或)
10.'()'        分組
11.'[]'        字元組概念,裡面所有資料都是或的關係
12'[^]'        取反操作

3.詞量(貪婪匹配的名詞)

"""量詞必須跟在表示式的後面 不能單獨使用 目的是增加匹配的字元數"""
1.'*'           匹配0次或者多次(預設為:越多越好)
2.'+'           匹配1次或者多次(預設為:越多越好)
3.'?'           匹配0次或者1次 (預設為:越多越好)
4.'{n}'         匹配N次        (預設為:越多越好)
5.'{n,}'        匹配最少N次    (預設為:越多越好)
6.'{n,m}'       匹配N次到M次   (預設為:越多越好)

三.取消轉義

\n      匹配不上 結果是False
\\n     用\代替轉義  結果\n
\\\\    用\\代替轉義 結果\\n
"""python中可以在字串前加'r'取消轉義"""

.四.貪婪匹配與非貪婪匹配

正規|匹配檔案|結果
# 1.貪婪匹配(全都要>為結尾)
<.*>|<script>alert(0)<script>|1條
# 2.非貪婪匹配(只要<>內的)
<.*?>|<script>alert(0)<script>|2條

五.er模組

1.在python中使用正規需藉助於模組er
2.或者其他第三方模組
3.import re

1.使用方法01

re.findall('a', 'jason oscar aaa')
# 'a'表示式
# 'jason oscar aaa'匹配的文字
#  findall所有符合條件的資料 並且組織成了列表
#  結果是['a', 'a', 'a', 'a', 'a']

2.使用方法02

re.search('a', 'jason oscar aaa')
# 'a'表示式
# 'jason oscar aaa'匹配的文字  
#  search 不貪婪找到一個符合條件就結束沒有返回None
#  結果 a 

3.使用方法03

re.match('a', 'jason oscar aaa')
# 'a'表示式
# 'jason oscar aaa'匹配的文字  
#  match 給a自動加上了'^'開頭必須是a 不然返回None

4.使用方法04

re.finditer('a', 'jason oscar aaa')
# 'a'表示式
# 'jason oscar aaa'匹配的文字
#  finditer變成了迭代器物件,節省空間
#  ([obj.group() for obj in res3]) 列表生成式 for迴圈呼叫
# ['a', 'a', 'a', 'a', 'a']

5.使用方法05

re.compile('\d+')  # 寫好正則之後反覆使用
print(re.findall(obj,'odasdkkkjj')) 
print(re.findall(obj,'oda21351jj')) 


呆!呆!呆!呆!