沙河市建设局网站连云港网站 建设

当前位置: 首页 > news >正文

沙河市建设局网站,连云港网站 建设,江西省建设招标网站,网站上线注意re、os和sys、subprocess 文章目录 re、os和sys、subprocess一、re1.正则字符2.正则表达式的使用3.group的使用4.贪婪匹配与惰性匹配5.其他注意事项 二、os和sys1.os2.sys 三、subprocess四、打印进度条 一、re python中的re模块用来使用正则表达式#xff0c;正则就是用一系…re、os和sys、subprocess 文章目录 re、os和sys、subprocess一、re1.正则字符2.正则表达式的使用3.group的使用4.贪婪匹配与惰性匹配5.其他注意事项 二、os和sys1.os2.sys 三、subprocess四、打印进度条 一、re python中的re模块用来使用正则表达式正则就是用一系列具有特殊含义的字符组成一套规则该规则用来描述具有某一特征的字符串正则就是用来去一个大的字符串中匹配出符合规则的子字符串。 1.正则字符 *表示字符出现0次及以上 表示字符出现1次及以上 {2,5}表示字符出现2至5次 ?表示字符出现0或1次 .表示任意字符 (a|b)表示a或b (ab)表示a与b [a-z A-Z]表示所有英文字母 注意[ - * /]会报错-在[]内表示取范围如果想表示减号需要转义- [^0-9] 表示取数字以外的字符^在[]内表示取反 \d表示数字 \D表示非数字 \w表示字母、数字、下划线 \W表示非字母、数字、下划线 \s表示空白字符(换号、空格、制表符等) \S表示非空白字符 \d表示边界( ab ,左右侧的空格就是边界) ^表示字符首行 \(表示字符末尾 2.正则表达式的使用 re.findall(正则字符字符串flag)会匹配字符串中所有的满足要求内容并返回列表 常见的flag设置有三种re.I表示不区分大小写re.M表示多行匹配^和\)可以匹配多行的首尾;re.DOTALL表示.可以匹配到换行。 import re #匹配以139开头的手机号码 resre.findall(139.{8},13914011111 13812311111 13915111111) print(res) [13914011111, 13915111111]re.search(正则字符字符串flag)会以match对象的形式返回一个匹配值(match对象中包含了值和索引) import re #匹配以139开头的手机号码 resre.search(139.{8},13914011111 13812311111 13915111111) print(res) re.Match object; span(0, 11), match13914011111 #可以通过group函数取出match对象内的值,span函数取出其索引 print(res.group()) print(res.span()) 13914011111 (0,11)re.split(正则字符字符串flag)表示按正则规则拆分字符串返回拆分后的列表 import re resre.split(\W,adc ?ews12 wdssa_ssa) print(res) [adc, ews12, wdssa, _ssa]re.sub(正则字符替换字符串/函数地址字符串flag)表示按正则匹配规则替换字符串中的字符 import re #把以139开头的电话换为138开头 resre.sub(139.{8},lambda x:f138{x.group()[3:]},13914011111 13812311111 13915111111) print(res) 13814011111 13812311111 13815111111re.finditer(正则字符字符串flag)表示返回匹配值match对象的的迭代器 import re #匹配以139开头的手机号码 resre.finditer(139.{8},13914011111 13812311111 13915111111) print(res.next()) print(res.next()) re.Match object; span(0, 11), match13914011111 re.Match object; span(24, 35), match13915111111re.compile(正则字符)表示将正则表达式传给变量 import re are.compile([a-z]) print(a.findall(adsds1223fd?.dsas23)) [adsds, fd, dsas]3.group的使用 在正则表达式中group表示分组group需要与match对象一起使用()括起来的正则字符表示分为一组可以通过group函数查看组内的字符 import re resre.search((139)-(.{8}),139-14011111) #查看第一组的字符 print(res.group(1)) #查看第二组的字符 print(res.group(2)) #查看匹配的字符 print(res.group()) #查看所有组的字符 print(res.groups())139 14011111 139-14011111 (139, 14011111)4.贪婪匹配与惰性匹配 贪婪匹配表示尽可能匹配多的内容(默认)惰性匹配表示尽可能匹配少的内容 import re resre.findall(.,1234567) print(res) [1234567]#切换惰性匹配时需要在匹配式最后加上? resre.findall(.?,1234567) print(res) [1, 2, 3, 4, 5, 6, 7]5.其他注意事项 在非返回match对象的一些函数中()表示只输出括号中匹配的内容(匹配边界)若一组正则字符中出现多个()会将一次匹配到的内容放入一个元组中 import re resre.findall(12(34),1234) print(res) [34]import re resre.findall(12(3)(4),1234) print(res) [(3, 4)]当正则字符中出现小括号时默认会被当做匹配边界如果你想让其保持小括号的意思时需要在(后加?: import re resre.findall(123(4|5),1234 1235) print(res) [4, 5]import re resre.findall(123(?:4|5),1234 1235) print(res) [1234, 1235]在正则字符传入python解释器的过程中会经历两次转义过程第一次是作为python字符串的转义第二次是作为正则字符的转义例如‘12\b’python会把字符转义为’12\x08’(\x08表示退格)传给正则模块然后正则模块匹配’12\x08’。 现在我想让正则表达式成功匹配到‘\c(1)这个字符串可以如何写正则字符呢 import re a‘\c(1) #给字符串前面加r以后python就不会对字符串进行转义 #方式一 resre.findall(r\c(1),a) print(res) [\c(1)]#输出时windows会将\c转义为\c #解释python将\c(1)传给正则模块正则模块把\c、(和)转义为\c、(和)#方式二 resre.findall(r\\c\(1\),a) print(res) [\c(1)] #解释python将\转义为\以后把\c(1)传给正则模块正则模块把\c、(和)转义为\c、(和)注意点正则表达式中匹配 \需要在表达式中写\ \ 二、os和sys 1.os os.getpid()表示获取pid号 os.getppid()表示获取父进程pid号 2.sys sys.argv()返回列表列表里是用户在终端传入的参数(例如用户在终端运行python 输入 python3 a.py 123 456123和456两个参数会被传入argv) sys.setrecursionlimit(n)表示设置最大递归深度为n sys.path表示导入模块的路径 三、subprocess subprocess模块可以使用python控制终端窗口 import subprocess #tasklist为windows的终端命令表示产看进程信息 #stdout和stderr表示终端返回的正确信息和错误信息 #subprocess.PIPE表示管道正确信息和错误信息会通过管道传给subprocess模块 #运行subprocess.Popen会产生一个子进程而res.stdout.read()会等待子进程运行结束并返回终端正常执行命令以后的结果 ressubprocess.Popen(tasklist,shellTrue,stdoutsubprocess.PIPE,stderrsubprocess.PIPE) bres.stdout.read() print(b.decode(gbk))四、打印进度条 import timedef make_progress(percent,width50):if percent 1:percent1#在%的格式化字符中表示%需写为%%show_str([%%-%ds] % width) % (int(percent * width) * #)print(\r%s %s%% %(show_str,int(percent * 100)),end)total_size10240 recv_size0 while recv_size total_size:time.sleep(0.5) # 模拟经过了0.5的网络延迟下载了1024个字节recv_size1024# 调用打印进度条的功能去打印进度条percentrecv_size / total_sizemake_progress(percent)