'''re模塊 內部實現不是Python 而是調用了c的庫 re是什麼 正則 表達 式子 就是一些帶有特殊含義的符號或者符號的組合 作用: 對字元串進行過濾 在一對字元串中找到所關心的內容 你就需要告訴電腦過濾規則是什麼樣 通過什麼方式來告訴電腦 就通過正則表達式 re模塊常用方法findall ...
'''
re模塊 內部實現不是Python 而是調用了c的庫
re是什麼
正則 表達 式子
就是一些帶有特殊含義的符號或者符號的組合
作用: 對字元串進行過濾
在一對字元串中找到所關心的內容
你就需要告訴電腦過濾規則是什麼樣
通過什麼方式來告訴電腦 就通過正則表達式
re模塊常用方法
findall 從左往右查找所有滿足條件的字元 返回一個列表
search 返回第一個匹配的字元串 結果封裝為對象 span=(0,5)匹配的位置 match匹配的值
match 匹配行首 返回值與search相同
對於search match 匹配的結果通過group來獲取
compile 將正則表達式封裝為一個正則對象 好處是可以重覆使用這個表達式
第一步:
學習正則表達式 各種符號所表示的含義
各種符號
常用的
\w \s \d . ^ $
範圍匹配
[] a|b
重覆匹配
{} + * ?
分組
()
常用的方法:
findall
search
match
sub
split
2.subprocess
run 返回執行結果對象
call 返回執行狀態碼
Popen 返回的也是對象 out in err
進程間的數據訪問
'''
import re
#待處理字元串
# src = 'hades'
#在字元串中查找所有滿足條件的
# print(re.findall('ad',src))
# \w 字母數字下劃線
# \W 非字母數字下劃線 與\w相反
# print(re.findall('\w',src))
# print(re.findall('\W',src))
# \s 所有不可見字元
# \S 所有可見字元
# print(re.findall('\s',src))
# print(re.findall('\S',src))
# \d 所有數字可見
# \D 所有非數字可見
# print(re.findall('\d',src))
# print(re.findall('\D',src))
# 特殊字元直接匹配
# print(re.findall('\n',src))
# print(re.findall('\t',src))
# . 除了\n以外任意字元
# print(re.findall('.',src))
# \s \w \d . 都是匹配單個字元
#匹配重覆字元 * + ? {}
# * 前面的表達式出現任意次
# print(re.findall('\d*','1 12 aa'))
# + 重覆1次或多次
# print(re.findall('\d+','1 1221abc41515a aa'))
# ? 重覆0次或1次
# print(re.findall('\d?','aa bb a1c 1C1 哈哈哈 123'))
# {n,m} 最少n次 最多m次
# print(re.findall('\d{1,3}','1 12 123 1234 123456'))
# {n} 必須是n次
# print(re.findall('[a-z]{3}','a aa aaa aaaa aaaaa'))
# {,m} 最大m次 0-m
# print(re.findall('[a-z]{,3}','a aa aaa aaaa aaaaa'))
#匹配範圍
# | 0|1|2 或
# print(re.findall('0|1|2','12413sdfg'))
# [] 字元集合 括弧內的符號不是整體
# print(re.findall('[012]','1982asasa'))
# 在範圍匹配時使用 ^ 托字元表示取反
# print(re.findall('[^0-9]','1982asasa'))
#找出範圍內 數字0-9 字母a-z A-Z 註意(減號只有在兩個字元中間才代表範圍,在兩邊都是普通字元)
# print(re.findall('[0-9a-zA-Z]','1982+asasa'))
# ^ 匹配行首
# print(re.findall('^h','helhhlohh'))
# $ 匹配行尾 註意:寫在表達式後面
# print(re.findall('s$','helhhlohs'))
# 單詞邊界
# print(re.findall('o\\b','hello word hi hades'))
#雙斜杠?
# print(re.findall('a\\\\c','aakakja\c'))
#貪婪匹配 * + 註意: 不是固定寫法 是一種現象
#會一直匹配到不滿足條件為止 用問號來阻止貪婪匹配(匹配最少滿足條件的字元數)
# print(re.findall('\w+? ','dfgregersg'))
# print(re.findall('\w*? ','dfgregersg'))
# () 用於給正則表達式分組(group)
#什麼時候需要阻止貪婪
# src = '<img src="www.baidupic.shuaiqi.jpg"><img src="www.baidupic.shuaiqi.jpg"><img src="www.baidupic.shuaiqi.jpg">'
#請用正則表達式取圖片地址
# print(re.findall('src="(.+?)"',src))
# 瞭解 加上?: 可以取消括弧中的優先順序
# print(re.findall('src="(?:.+?)"',src))
subprocess模塊
sub 子
process 進程
什麼是進程
正在進行中的程式 每當打開一個程式就會開啟一個進程
每個進程包含運行程式所需的所有資源
正常情況下,不可以跨進程訪問數據
但是有些情況下就是需要訪問別的進程數據 提供一個叫做管道的對象 專門用於跨進程通訊
作用: 用於執行系統命令
常用方法:
run 返回一個表示執行結果的對象
call 返回的執行的狀態碼
總結: subprocess的好處是可以獲取指令的執行結果
subprocess執行指令時,可以在子進程中這樣