re的剩余模块和subprocess模块

  今天学习了re的剩余模块和subprocess模块

  一、re的剩余模块

    #[]  范围匹配 中间 用-来连接

    re.findall('[a-zA-Z0-9]','a ab asdf sadf asdf 213 asfd ')

    如果要匹配 符号- 要写表达式的左边或右边

    print(re.findall('[-ab]','asdf dsf sdfa asf- asf---'))

    重复匹配  表达式的匹配次数

    * 表示 任意次数  所以0次也满足

    print(re.findall('[a-zA-Z]*','a ab abc asdfasdfasdf a123xc'))

    + 一次或多次

    print(re.findall('[a-zA-Z]+','a b abc adsfasdfasd a123c'))

    ? 0次或1次

    print(re.findall('[a-zA-Z]?','a ab abc asdfasdfasdf a123c'))

    {1,2} 自定义匹配次数  {1,} 1到无穷  {,1} 0到1次

    print(re.findall('[a-zA-Z]{1,3}','a b abc weqrsdafasdfasd a123c'))

    + * 贪婪匹配  表达式匹配的情况下  尽可能的多拿       (一直匹配 直到不满足为止)

    print(re.findall('w*','asdfsdfsadfasd asdfsdfasd'))

    print(re.findall('w+','sdfasdfasd asdfsdfas'))

    非贪婪匹配 在表达式的后面加上?

    print(re.findall('w?','sdfsadfasd asdfasfasd')) 非贪婪匹配

    分组  加上分组 不会改变原来的规则  仅仅是将括号中的内容单独拿出来了

    print(re.findall('([a-zA-Z]+)_dsb','aigen_dsb cxx_dsb alex_dsb zxx_dsb _dsb'))

    re模块中常用的函数

    match 从字符串开始处匹配  只找一个

    print(re.match('w*','abc').group(0))  获取匹配成功的内容

    group 用来获取某个分组的内容  默认获取第0组  就是整个表达式本身

    print(re.match('([a-zA-Z]+)(_dsb'),'aigen_dsb cxx_dsb alex_dsb zxx_dsb _dsb').group(2))

    print(re.match('w*','abc').span())  获取匹配成功的内容的索引

    

    print(re.search('w*','abc').group())

    从全文范围取一个

    print(re.search('([a-zA-Z]+)(_dsb)','xxx aigen_dsb cxx_dsb alex_dsb zxx_dsb _dsb'))

    从开始的位置开始匹配

    print(re.match('([a-zA-Z]+)(-dsb)','xxx aigen_dsb cxx_dsb alex_dsb zxx_dsb _dsb').group())

    将正则表达式 编译成一个对象 往后可以不用再写表达式  直接开始匹配

    print(re.compile('w*').findall('abcd'))

    print(re.split('|_*|','python|____|js|____|java'))

    

    替换

    print(re.sub('python','PYTHON','js|python|java'))

    用正则表达式来交换位置

    text = 'java|C++|js|C|python'

    将整个内容分为三块  java  |C++|js|C|   python

    patter = '(.+?)(|.+|)(.+)'

    ?:用于取消分组  就和没写括号一样

    patter = '(?:.+?)(|.+|)(.+)'

    print(re.search(partten,text).group(0))

    print(re.sub(partten,r'231',text))

    当要匹配的内容包含时

    text = 'ap'

    'p'

    print(text)

    print(re.findall(r'a\p',text))

  二、subprocess模块

    cmd = r'dir D:上海python全栈4期day23' | findstr "py"'

    res = subprocess.Popen(cmd,shell = True,stdout = subprocess.PIPE,stderr = subprocess.PIPE)

    从管道中读取数据  管道就是  两个进程通讯的媒介

    print(type(res.stdout.read().decode('GBK')))

    print(res.stdout.read().decode('GBK'))

    print(res.stderr.read().decode('GBK'))

    

    dir = r'dir D:上海python全栈4期day23'

    find = 'findstr "py"'

    stdout  输出管道

    stdin 输入管道

    stderr  错误管道

    res1 = subprocess.Popen(dir,shell=True,stdout = subprocess.PIPE,stderr = subprocess.PIPE)

    res2 = subprocess.Popen(find,shell = True,stdout = subprocess.PIPE,stderr = subprocess.PIPE,stdin = res1.stdout)

    从管道中读取数据  管道就是  两个进程通讯的媒介

    print(type(res.stdout.read().decode('GBK')))

    print(res1.stdout.read().decode('GBK'))

    print(res2.stderr.read().decode('GBK'),'33333')

    简单总结  subprocess  主要用于执行系统指令  (启动子进程) 与os.system的不同在于

    subprocess 可以与这个字进程进行数据交换

    

原文地址:https://www.cnblogs.com/xiaocaiyang/p/9819945.html