正則函式
1.search 通過正則匹配出第一個物件返回,通過group取出物件中的值
# search 通過正則匹配出第一個物件返回,通過group取出物件中的值 strvar = "1+2 3*4" obj = re.search("\d+(.*?)\d+",strvar) print(obj) # 返回匹配到的內容(匹配到一個就返回) res = obj.group() print(res) # <_sre.SRE_Match object; span=(0, 3), match='1+2'> # 返回分組裡面的內容,型別是元組 tup = obj.groups() print(tup[0]) # 1+2
2.match 驗證使用者輸入內容
# match 驗證使用者輸入內容(瞭解) """當search函式裡面的正規表示式前面加上^ 等價於 matth的用法""" strvar = "a13566668888" obj = re.search("^\d+",strvar) print(obj) # print(obj.group()) obj = re.match("\d+",strvar) print(obj) # print(obj.group())
3.split 切割
# split 切割 strvar = "alex|xboyww&wusir%ritian" res = re.split("[|&%]",strvar) print(res) # ['alex', 'xboyww', 'wusir', 'ritian'] strvar = "alex234234xboyww6786wusir78967896ritian" res = re.split("\d+",strvar) # ['alex', 'xboyww', 'wusir', 'ritian'] print(res)
4.sub 替換
# sub 替換 """sub(正則,要替換的字元,原字串[,次數])""" strvar = "alex|xboyww&wusir%ritian" res = re.sub("[|&%]","-",strvar) print(res) # alex-xboyww-wusir-ritian strvar = "alex|xboyww&wusir%ritian" res = re.sub("[|&%]","-",strvar,2) print(res) # alex-xboyww-wusir-ritian
5.subn 替換
# subn 替換 (用法和sub一樣,區別在於返回的是元組 (結果,次數) ) strvar = "alex|xboyww&wusir%ritian" res = re.subn("[|&%]","-",strvar) res = re.subn("[|&%]","-",strvar,1) print(res)
6.finditer 返回字串中響應內容 返回迭代器
# finditer 匹配字串中相應內容,返回迭代器[迭代器中包含的是物件] from collections import Iterator , Iterable strvar = "jkasdfjkadfjk1234asfj2342kfa" it = re.finditer("\d+",strvar) print(isinstance(it,Iterator)) # 獲取迭代器裡面的內容 for i in it: print(i.group())
7.compile 指定一個統一的匹配規則
# compile 指定一個統一的匹配規則 """ 正常情況下,正規表示式編譯一次,執行一次. 如果想要編譯一次,多次使用的話,使用compile compile 可以編譯一次,終身受益.節省系統的資源 """ strvar = "jksdjdfsj72343789asdfaj234" pattern = re.compile("\d+") print(pattern) lst = pattern.findall(strvar) print(lst) obj = pattern.search(strvar) print(obj.group())
8.正規表示式修飾符
# ### 正規表示式修飾符 # re.I 使匹配對大小寫不敏感 strvar = "<h1>72347923489</H1>" pattern = re.compile(r"<h1>(.*?)</h1>",flags=re.I) obj = pattern.search(strvar) print(obj) print(obj.group()) # re.M 使每一行都能夠單獨匹配(多行),影響 ^ 和 $ strvar = """<h1>72347923489</H1> <p>72347923489</p> <li>72347923489</li> """ pattern = re.compile("^<.*?>(?:.*?)<.*?>$",flags=re.M) lst = pattern.findall(strvar) print(lst) # re.S 使 . 匹配包括換行在內的所有字元 strar = """give 1234234234mefive """ pattern = re.compile("(.*?)mefive",flags=re.S) obj = pattern.search(strar) print(obj) print(obj.group()) # 可以加多個修飾符 通過| 拼接 """ pattern = re.compile("(.*?)mefive",flags=re.S|re.I|re.M) """
模組和包
模組部分
1.import匯入
# 匯入一次,終身受益,不會重複匯入 """ import mymodule import mymodule import mymodule """""" # 模組.變數 print(mymodule.dog) # 模組.函式 mymodule.xboyww() # 模組.類 print(mymodule.MyClass().name)
2.匯入任意路徑下的模組
# ### 2.匯入任意路徑下的模組 """自定義模組時,不能使用中文,也不能使用已存在的模組名,會被覆蓋.""" import sys print(sys.path) """ # 把路徑新增到系統環境變數path當中, # 執行命令時,系統會自動按照路徑找到模組,從而引入 # 如果找不到當前模組所在的路徑,直接報錯 """ # 在windows中執行 sys.path.append(r"E:\python31_gx") import mymodule2 print(mymodule2.ceshi100) import mymodule2 as m2 print(m2.ceshi200) """ # [linux] ['/mnt/hgfs/python31_gx/day21/import_bao', '/home/wangwen/PycharmProjects/untitled', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages' ] # [windows] ['E:\\python31_gx\\day21\\import_bao', 'E:\\py_mylianxi', 'E:\\py_mylianxi\\venv\\Scripts\\python36.zip', 'C:\\Users\\wangwen\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\wangwen\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\wangwen\\AppData\\Local\\Programs\\Python\\Python36', 'E:\\py_mylianxi\\venv', 'E:\\py_mylianxi\\venv\\lib\\site-packages' ] """
3.from ... import ...
# ### 3.from ... import ... 從 ... 匯入 ... # 匯入單個 from mymodule import dog print(dog) # 匯入多個 from mymodule import cat,xboyww print(cat) xboyww() # 匯入所有 """ * 代表所有 """ from mymodule import * print(cat) xgirl() # 匯入的同時,起別名 from mymodule import xboyww as ww ww()
*** 關於設定*號的匯入範圍:
# 可以設定*號的匯入範圍 from mymodule import * print(cat) # xboyww() error '''可以在mymodule模組中設定__all__ = ["dog","cat"]來指定*號的匯入範圍'''
4.__name__ 魔術屬性的使用
返回模組名字的魔術屬性 __name__
如果當前檔案是直接執行的,返回__main__
如果當前檔案是間接匯入的,返回當前檔名(模組名)
檔案直接被執行的時候返回__main__
當成模組被匯入的時候,返回模組名本身
包的部分
關於包,需要注意的點:
1.檔案就是模組,資料夾就是包
2.__init__.py 對包(資料夾)進行初始化的指令碼檔案
匯入包的時候,系統自動呼叫__init__.py檔案,把init檔案裡面成員進行匯入
3.可以通過__init__間接匯入其他模組
1.import匯入包
# ### (一)import 匯入包的使用 # 1.獲取包初始化檔案中的成員 import package1 print(package1.ceshi301) # 2.匯入包下的某些模組 # 方法一 import package1.mypath package1.mypath.join() # 方法二(模擬os.path.join寫法) import package1 package1.mypath.join() package1.mypath.getsize() ''' 注意:在方法二的情況下,需要在包內的__init__.py中寫入from package1 import mypath 相當於通過__init__檔案間接匯入了join和getsize方法 '''
2.from ... import 從包匯入相應成員
# 從包當中匯入成員屬性(__init__) from package1 import ceshi301 print(ceshi301) # 從包當中匯入模組 from package1 import mypath mypath.join() # 引入包下的模組下的具體成員 from package1.mypath import getsize getsize() # 在引入的同時,起別名 from package1.mypath import getsize as gs , join as j gs() j() # 匯入所有,可以指定*號引入的範圍 from package1 import * print(ceshi301) # print(ceshi302) error
3.單入口模式(相對匯入)
# ### (三) 單入口模式(相對匯入) import package2.pkg1.pgone_1 as ppp1 # print(ppp1.ceshi1000)